0

发布者和订阅者都启动时没有错误,但订阅者在我发布消息时没有响应(它应该在屏幕上打印一些内容)。请帮忙!!

订阅者 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");
4

1 回答 1

2

这里没有太多信息。但这是你可以测试的

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

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

于 2013-07-09T19:37:28.963 回答