【问题标题】:How to add a service dependency to NServiceBus Generic Host如何向 NServiceBus 通用主机添加服务依赖项
【发布时间】:2011-12-15 13:37:34
【问题描述】:

我有以下服务布局:

  • 接口服务(根据 WCF 请求、TCP 请求、轮询等生成命令)
  • Worker Service(使用接口服务生成的命令并发布事件)
  • 事件处理服务(处理工作服务产生的事件)

我正在使用 MSMQ 订阅存储。

我目前的问题是我必须在 worker 服务 启动之后启动 事件处理程序服务 。如果我反向操作,或者重新启动 worker 服务,事件处理程序服务将不会接收到发布。

我的第一个想法是在事件处理服务上添加服务依赖。

如何使用 NServiceBus 提供的通用主机来执行此操作?有没有更好的方法来解决这个问题?

【问题讨论】:

    标签: c# .net windows-services msmq nservicebus


    【解决方案1】:

    如果您使用 MSMQ 作为订阅存储,则将订阅队列设为事务性。

    那么即使重启后,来自事件处理服务的订阅消息仍将保留在工作服务订阅队列中。

    关于启动顺序,事件处理服务将订阅放入工作服务的输入队列,无论工作服务是否启动。所以启动顺序也不重要。

    更新

    实际上,这完全不正确,因为使队列具有事务性将为您提供跨服务器重新启动的持久性。

    对于非事务性队列,您仍然应该得到我上面描述的相同行为。

    【讨论】:

    • 我将尝试使队列具有事务性。我必须将.IsTransactional(true) 添加到流利的配置中,对吗?
    • 是的,或者从 AsA_Server 派生。但是,我意识到了一些事情,请参阅我原始答案的更新。
    • 我改变了 IsTransactional 属性,但它似乎没有改变。明天我会更深入地调查这个问题。
    【解决方案2】:

    我建议使用数据库订阅选项。这将保留您的订阅。

    【讨论】:

      猜你喜欢
      • 2016-11-24
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 2016-10-06
      相关资源
      最近更新 更多