【问题标题】:nservicebus subscriber not receiving messagenservicebus 订阅者未收到消息
【发布时间】:2013-07-08 23:29:45
【问题描述】:

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

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

【问题讨论】:

  • 您是明确将发布者命名为“MyPublisher”还是使用默认值?

标签: .net xml nservicebus publish-subscribe


【解决方案1】:

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

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

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

【讨论】:

  • 我什至没有指定assembly 属性。这最终解决了我的问题!
  • @Ropstah 什么程序集属性?
  • @Sinaesthetic 配置中的那个,记录在这里:docs.particular.net/nservicebus/messaging/…
  • Assemby 版本控制对我来说是个问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多