NServiceBus - 作为订户和工作服务的应用程序

时间:2009-12-21 09:58:23

标签: msmq nservicebus publish-subscribe

我有一项服务需要在多台机器上运行,从单个队列中挑选作业,确保每项工作仅由一项服务承担。我还需要发布要接收的所有服务的消息,例如重新加载触发器。

这是否可以在没有太多黑客攻击的情况下在nservicebus中使用?

我已经证明发布模型和发送模型都适用于我,但是一旦我的客户端需要处理这两种体系结构,它就将它们视为发送体系结构而不是所有服务都接收发布方法。

以下是我到目前为止的配置文件:

发布者(所有服务都需要接收这些消息),使用Bus.Publish< ...>(...):

  <MsmqTransportConfig InputQueue="ConfigQueue" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />

  <UnicastBusConfig DistributorControlAddress="" DistributorDataAddress="" ForwardReceivedMessagesTo="">
<!-- Message publishers don't require message queues -->
<MessageEndpointMappings />  </UnicastBusConfig>

发件人(只有一个服务可以选择这些),使用Bus.Send&lt; ...&gt;(...):

  <MsmqTransportConfig InputQueue="BrokerQueue" ErrorQueue="error" numberOfWorkerThreads="1" MaxRetries="5" />

  <UnicastBusConfig DistributorControlAddress="" DistributorDataAddress="" ForwardReceivedMessagesTo="">
<MessageEndpointMappings>
  <add Messages="EventMessage, Messages" Endpoint="AgentQueue" />
</MessageEndpointMappings>  </UnicastBusConfig>

服务(每个服务具有相同的本地队列名称并订阅上面的发布者):

  <MsmqTransportConfig InputQueue="AgentQueue" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />

  <UnicastBusConfig>
<MessageEndpointMappings>
  <add Messages="NServiceBus.Messages.ReloadMessage, NServiceBus.Messages" Endpoint="ConfigQueue" />
</MessageEndpointMappings>  </UnicastBusConfig>

1 个答案:

答案 0 :(得分:1)

使用NServiceBus附带的Distributor完成不同机器之间的负载平衡。 (远程事务读取在MSMQ上是不明确的,不建议使用)

所以你发送的所有内容都会转到同一个输入队列,在你的情况下是BrokerQueue。然后,您将配置分发服务器以提供该队列。

有关如何配置分销商的更多信息,请访问:

http://tech.groups.yahoo.com/group/nservicebus/message/2009

希望这有帮助!