我有一项服务需要在多台机器上运行,从单个队列中挑选作业,确保每项工作仅由一项服务承担。我还需要发布要接收的所有服务的消息,例如重新加载触发器。
这是否可以在没有太多黑客攻击的情况下在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>
答案 0 :(得分:1)
使用NServiceBus附带的Distributor完成不同机器之间的负载平衡。 (远程事务读取在MSMQ上是不明确的,不建议使用)
所以你发送的所有内容都会转到同一个输入队列,在你的情况下是BrokerQueue。然后,您将配置分发服务器以提供该队列。
有关如何配置分销商的更多信息,请访问:
http://tech.groups.yahoo.com/group/nservicebus/message/2009
希望这有帮助!