配置端点以充当工作者和订阅者

时间:2009-10-23 10:29:23

标签: nservicebus publish-subscribe

是否可以将端点配置为从分销商处检索作业的工作人员并订阅某种消息?

我有以下场景(适用于销售术语)

*)中央部门不时发布新价格清单。必须通知所有工人。这意味着,工作人员应该订阅此事件。

*)当新订单到达中央时,它将其发送给分销商,分销商将其发送给下一个待处理的闲置工人。这意味着,必须将工作者配置为从分发者接收消息。 我使用以下配置:

 <MsmqTransportConfig
    InputQueue="worker"
    ErrorQueue="error"
    NumberOfWorkerThreads="2"
    MaxRetries="5"
  />

  <UnicastBusConfig
    DistributorControlAddress="distributorControlBus"
    DistributorDataAddress="distributorDataBus" >    
    <MessageEndpointMappings>
      <add Messages="Events" Endpoint="messagebus" />
    </MessageEndpointMappings>
  </UnicastBusConfig>

当我仅将其配置为工作者或仅作为订阅者时,一切都按预期工作,但不是在我将其配置为两者时。

我发现一条消息到达中心的输入队列,并将分发者的地址作为返回地址而不是工作人员地址,并且发布者在这种情况下不识别订阅者。 有任何想法吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

工人不应该以那种方式使用IFAIK。我认为可行的方法是让您的中心订阅价格,当“NewOrderMessage”到达时,以所需的价格(可能只是该特定订单中的产品价格)丰富该数据,并向输入发送新的ProcessOrderRequest经销商的队列。

另一种方法是让发送订单请求的流程在订单请求中包含价格。

这有什么意义吗?

/ Andreas

答案 1 :(得分:1)

分销商背后的工作人员是如何扩展单个逻辑订户,而不是如何处理多个逻辑订户。关键是,只有工人池中的一个工人才能获得给定的消息,在这种情况下,您希望所有工人对发布者看起来都一样 - 这就是分发者地址的原因。

如果您想要扩展多个逻辑订阅者,请为每个订阅者分配他们自己的分发者。