Nservicebus 将端点配置为同时作为工作方和订阅方

Nservicebus 将端点配置为同时作为工作方和订阅方,nservicebus,publish-subscribe,Nservicebus,Publish Subscribe,是否可以将端点配置为从分发服务器检索作业并订阅某种消息的工作者 我有以下场景(适用于销售术语) *)中央部门不时发布一份新价格清单。必须通知所有工人。这意味着,工作者应该订阅此事件 *)当新订单到达中心时,它将其发送给分发服务器,分发服务器将其发送给下一个待处理的空闲工人。这意味着,必须将工作进程配置为从分发服务器接收消息。 我使用以下配置: <MsmqTransportConfig InputQueue="worker" ErrorQueue="error" N

是否可以将端点配置为从分发服务器检索作业并订阅某种消息的工作者

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

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

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

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

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

当我仅将其配置为工作服务器或订阅者时,一切都按预期工作,但当我同时将其配置为工作服务器和订阅者时,情况并非如此

我发现一条消息到达中央服务器的输入队列时,分发服务器的地址作为返回地址而不是工作地址,在这种情况下,发布服务器无法识别订户。
有什么想法吗?提前感谢。

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

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

这有什么意义吗


/Andreas

分发服务器背后的工作人员是如何扩展单个逻辑订阅服务器,而不是如何处理多个逻辑订阅服务器。关键是,只有一个工作线程池中的一个工作线程应该得到一条给定的消息,在这种情况下,您希望所有工作线程在发布者看来都是相同的,这就是为什么要给出分发服务器的地址


如果您有多个要扩展的逻辑订阅服务器,请为每个订阅服务器提供自己的分发服务器。

我现在就是这样做的。价格表附在订单信息后。我的目的是减少信息量,节省带宽。如果这不起作用,我可以考虑发送当前价格列表的时间戳,让工人使用Cuff.Read()来从中央请求它,但这也意味着我必须在某种程度上坚持消息直到答案到达。还有其他方法吗?我们需要的数据非常繁重,无法通过有线传输Gecko,我们正在考虑捆绑在数据总线中,以传输更多数据。我想我现在理解了工人的概念。当工作者发布消息时,应通知分发服务器端点的所有订户。这是有道理的。当然,多个分发服务器(每个分发服务器都有自己的工作人员)仍然只允许分发服务器而不是工作人员接收广播消息?Gecko,当工作人员发布消息时,它会将该消息的返回地址设置为其分发服务器的地址,以便在订阅者看来,它们就是分发服务器。希望这能回答你的问题。