【问题标题】:NServiceBus Publish/SubscribeNServiceBus 发布/订阅
【发布时间】:2010-06-08 01:33:28
【问题描述】:

我们正在努力寻找一种优雅的解决方案,用于报告从我们的基础架构中的系统生成的异常,该解决方案比查看电子邮件或检查日志文件更易于操作。跨服务总线的发布/订阅模型可以很好地解决这个问题。服务会发布错误/事件,订阅者可以使用简单的模式匹配过滤这些消息。

我们一直在研究 NServiceBus 项目,想知道它是否能满足我们的要求,查看 PubSub 示例 (http://docs.particular.net/samples/pubsub/) 我们发现它没有解决以下两种情况:

  1. 所有发布者发布相同的消息类型
  2. 订阅者不应要求了解发布者端点

我们已设法满足这些要求,但我们不确定配置是否正确。以下是我们的解决方案:

  1. 所有发布者共享相同的订阅存储配置 (DBSubscriptionStorage),这是一个共享数据库,如文档 http://docs.particular.net/nservicebus/messaging/publish-subscribe/ 的订阅存储部分所述。

  2. 所有发布者/订阅者都配置为使用 nservicebus 网站上的文档中描述的分发者。

我们想知道这是否是 NServiceBus 发布/订阅模型的正确实现,或者是否有其他解决方案可以实现我们的目标?

【问题讨论】:

    标签: c# nservicebus publish-subscribe nservicebus-distributor


    【解决方案1】:

    这已在此处的讨论组中讨论过:

    http://nservicebus.grouply.com/message/7059

    简而言之,您将让每个节点发送,而不是发布到单个端点。

    希望对您有所帮助。

    【讨论】:

    • 感谢您的回复,IBus.Publish 和 IBus.Send 之间的根本区别是什么?
    • 暂时忽略我们的错误场景,也许考虑一个订单处理系统,其中一组服务正在发布他们已处理的订单的通知。如果我们要从多个发布者向多个订阅者发布相同的订单通知消息,那么共享订阅存储是否是正确的实现。当订阅者订阅我们的消息时,订阅将被添加到共享存储中,并且该特定消息的所有发布者都开始向我们的订阅者发布。这似乎有效,但它正确吗?
    • Matt - 我认为您将多个物理发布节点的想法与多个逻辑发布服务相结合。 NServiceBus 强制执行单个逻辑发布服务,但在该服务中,允许您想要任意数量的物理节点(在生产配置文件中自动设置,您将使用 DbSubscriptionStorage 手动执行此操作)。此外,IBus.Publish 用于传达已经发生的事件,而 Send 用于请求我们想要发生的事情(但可能会被拒绝)。事件不能被拒绝(因为它们已经发生了)。
    【解决方案2】:

    您可以将消息写入 Windows 事件日志并使用 OpManger 之类的工具来监控日志中的错误/警告。

    额外的好处是 OpManager 可以监控进程、网络端口,以便您可以检测其他故障。它还支持电子邮件警报,并具有漂亮的 WebUI。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 2015-04-13
      • 1970-01-01
      • 2013-09-08
      • 2016-04-26
      • 1970-01-01
      相关资源
      最近更新 更多