2013-07-08 81 views
0

发布者和订户都启动没有错误,但订户没有响应时,我发布消息(它应该打印到屏幕上的东西)。请帮忙!!nservicebus用户没有收到消息

用户的app.config看起来是这样的:

<add Messages = "Messages" Assembly = "Messages" Endpoint = "MyPublisher" /> 

终点为出版商:

Configure.With() 
    .DefaultBuilder() 
    .JsonSerializer 
    .DefiningEventsAs(t => t.Namespace != null && t.Namespace == "Messages") 
    .MsmqSubscriptionStorage 

端点的用户:

Configure.With() 
    .DefaultBuilder() 
    .JsonSerializer 
    .DefiningEventsAs(t => t.Namespace != null && t.Namespace == "Messages"); 
+0

您是否明确指定发布商“MyPublisher”或者是否采用默认值? –

回答

2

有没有大量的信息在这里。但这里是你可以测试的

  1. 你指定名称空间是“消息”,没有别的。它是否正确?记录NServiceBus应该声明它找到了消息,并且可以将它们映射到处理程序。所以程序集名称和名称空间都应该是“消息”
  2. 您可以在发布者传入队列上启用日记功能。每当订阅者首次启动时,它就开始向发布者发送消息。无论!在该消息中,它表示它正在订阅某些消息。如果该消息永远不会到达发布者,那就是您的问题。
  3. 装配版本可能是个问题。如果发布者和订阅者具有与消息不同的程序集版本,则发布者会认为没有订阅者。
  4. 至于发布者,订阅者还需要能够将消息映射到处理程序。记录应该说明。用户也应该收到消息。通过开启日记功能来验证这一点。
  5. 在单台机器上进行测试。如果在远程计算机上,发布者应该在“传出队列”文件夹中有一个连接到另一台计算机。在开始服务并发送订阅消息之后,订户也是如此。
  6. 某处应该存储订阅消息,除非您正在使用内存存储。换句话说,当使用SQL Server或RavenDB存储订阅时,订阅者(显然)的订阅应该是可见的。
  7. 如果您使用InMemory订阅存储,显然您不应该关闭发布服务器,否则您的订阅将消失。如果您已转向发布商,订阅者需要再次发送订阅消息。这是在服务启动时自动完成的。

希望这有助于找到解决方案。

+0

我甚至没有指定'assembly'属性。这最终解决了我的问题! – Ropstah

+0

@Ropstah什么程序集属性? – Sinaesthetic

+0

@Sinaesthetic配置中的一个,记录在这里:https://docs.particular.net/nservicebus/messaging/routing?version=core_5#command-routing –