Использование NServiceBus с несколькими приложениями действует как издатель и подписчик

Я пытаюсь использовать NServiceBus, чтобы 4 приложения взаимодействовали друг с другом.

Все эти приложения должны выступать в качестве издателя и подписчика.

Единственный способ заставить его работать - это создать "основную" очередь с именем Server, на которую сопоставляются MessageEndpointMappings во всех конфигурациях приложений, но я думаю, что это не очень хороший способ...

Итак, как мне настроить NServiceBus для всех этих приложений, чтобы это заработало?

Приложение 1:

  <MsmqTransportConfig InputQueue="MyApp1" ErrorQueue="Errors" NumberOfWorkerThreads="1" MaxRetries="5"/>
  <MsmqSubscriptionStorageConfig Queue="Subscriptions" />
  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="MyApp.Messages" Endpoint="Server" />
    </MessageEndpointMappings>
  </UnicastBusConfig>

Приложение 2:

  <MsmqTransportConfig InputQueue="MyApp2" ErrorQueue="Errors" NumberOfWorkerThreads="1" MaxRetries="5"/>
  <MsmqSubscriptionStorageConfig Queue="Subscriptions" />
  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="MyApp.Messages" Endpoint="Server" />
    </MessageEndpointMappings>
  </UnicastBusConfig>

Приложение 3:

  <MsmqTransportConfig InputQueue="MyApp3" ErrorQueue="Errors" NumberOfWorkerThreads="1" MaxRetries="5"/>
  <MsmqSubscriptionStorageConfig Queue="Subscriptions" />
  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="MyApp.Messages" Endpoint="Server" />
    </MessageEndpointMappings>
  </UnicastBusConfig>

Приложение 4:

  <MsmqTransportConfig InputQueue="MyApp4" ErrorQueue="Errors" NumberOfWorkerThreads="1" MaxRetries="5"/>
  <MsmqSubscriptionStorageConfig Queue="Subscriptions" />
  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="MyApp.Messages" Endpoint="Server" />
    </MessageEndpointMappings>
  </UnicastBusConfig>

person Yoann. B    schedule 19.05.2010    source источник
comment
Итак, независимо от типа сообщения, вы хотите, чтобы каждое приложение могло опубликовать сообщение, и чтобы все четыре приложения (включая издателя) получили это сообщение? Если нет, то какова истинная цель?   -  person David Boike    schedule 19.05.2010
comment
Можете ли вы уточнить бизнес-требования, стоящие за вашими коммуникационными потребностями?   -  person Andreas Öhlund    schedule 20.05.2010


Ответы (1)


NServiceBus предпочитает, чтобы вы следовали шаблону сообщения определенного типа, публикуемого только одной службой. Обычно у вас будет сборка «сообщений» для каждой службы, например:

  <MsmqTransportConfig InputQueue="MyApp1" ErrorQueue="Errors" NumberOfWorkerThreads="1" MaxRetries="5"/>
  <MsmqSubscriptionStorageConfig Queue="MyApp1Subscriptions" />
  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="MyApp2.Messages" Endpoint="MyApp2" />
      <add Messages="MyApp3.Messages" Endpoint="MyApp3" />
      <add Messages="MyApp4.Messages" Endpoint="MyApp4" />
    </MessageEndpointMappings>
  </UnicastBusConfig>

Если вы хотите опубликовать один и тот же тип сообщения из всех четырех приложений, вы можете использовать Bus.Send() сообщение в центральную службу публикации событий, которая затем может использовать Bus.Publish().

person Sam    schedule 20.05.2010