NServiceBus подписка не работает - PullRequest
0 голосов
/ 25 января 2012

Я пытаюсь настроить пример NServiceBus PubSub, который размещен внутри набора служб Windows.

Я настроил своего издателя и вижу, что он вызывает метод публикации моих шин.Я также настроил подписчика для прослушивания сообщений, которые я отправляю.Однако, похоже, что фактический процесс подписки не работал должным образом, так как я не вижу сообщения в журнале о том, что подписчик был подписан (как я делаю в образце PubSub).

Мне просто интересно, нужна ли вам какая-то магиячтобы это работало при размещении службы самостоятельно.

ниже моя конфигурация

Publisher

App.Config

 <configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
  </configSections>
  <!-- 1. In order to configure remote endpoints use the format: "queue@machine" 
       2. Input queue must be on the same machine as the process feeding off of it.
       3. Error queue can (and often should) be on a different machine.
       4. The community edition doesn't support more than one worker thread.
  -->

  <MsmqTransportConfig InputQueue="publisher.input" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />
  <UnicastBusConfig>
    <MessageEndpointMappings></MessageEndpointMappings>
  </UnicastBusConfig>

Настройка шины:

var bus = Configure.With()
            .Log4Net()
            .NinjectBuilder()
            .XmlSerializer()
            .MsmqSubscriptionStorage()
            .MsmqTransport()
                .IsTransactional(false)
                .PurgeOnStartup(false)
            .UnicastBus()
                .ImpersonateSender(false)
            .CreateBus()
            .Start();

Подписчик

App.Config

<configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
  </configSections>
  <!-- 1. In order to configure remote endpoints use the format: "queue@machine" 
       2. Input queue must be on the same machine as the process feeding off of it.
       3. Error queue can (and often should) be on a different machine.
       4. The community edition doesn't support more than one worker thread.
  -->

  <MsmqTransportConfig
    InputQueue="subscriber.input"
    ErrorQueue="error"
    NumberOfWorkerThreads="1"
    MaxRetries="5"
  />

  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="MyEventNamespace" Endpoint="publisher.input" />
    </MessageEndpointMappings>
  </UnicastBusConfig>

Настройка шины:

        var bus = Configure.With()
            .Log4Net()
            .NinjectBuilder()
            .XmlSerializer()
            .MsmqSubscriptionStorage()
            .MsmqTransport()
                .IsTransactional(false)
                .PurgeOnStartup(false)
            .UnicastBus()
                .ImpersonateSender(false)
            .CreateBus()
            .Start();

Что-то я пропускаю или тупо делаю?

Ура

Ответы [ 3 ]

3 голосов
/ 25 января 2012

Основная проблема заключается в том, что вы не вызывали .LoadMessageHandlers () после .UnicastBus () в вашем подписчике.В результате он не знает, что у вас есть обработчик для события, настроенный для отправки из publisher.input, и, как следствие, не подписывается.

Еще одна вещь, которую вы не делаетеДля подписчика необходимо включить .MsmqSubscriptionStorage ().

1 голос
/ 13 июня 2013

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

Где-то я видел пример, который добавил это в проект обработчика сообщений:

class MessageConventions : IWantToRunBeforeConfiguration { 
   public void Init() {
      Configure.Instance.DefiningMessagesAs(t => t.Namespace != null &&  
            t.Namespace.StartsWith("Your.Messages.Namespace.Here"));
   }
}

, который работал для меня.

Пример кода здесь содержит нечто подобное.

1 голос
/ 25 января 2012

В подписчике вы можете позвонить в Bus.Subscribe () и настроить его явно.

...