2012-05-29 3 views
2

У меня есть проблема в NServiceBus 3.NServiceBus отправлять сообщения не появляются в конечной точке

Я пытаюсь отправить сообщения в конечную точку. Тип сообщения и конечная точка настраивается в конфигурации, как

<UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="GatewayMessages.ProcessAttachmentCommand, GatewayMessages" Endpoint="Attachments"/> 
    </MessageEndpointMappings> 
</UnicastBusConfig> 

конечная точка, в его EndpointConfig.cs, следующая конфигурация:

 Configure 
      .With() 
      .DefineEndpointName("Attachments") 
      .DefaultBuilder() 
      .DBSubcriptionStorage() 
      .XmlSerializer() 
      .FileShareDataBus(@"C:\Attachments\nservicebus\databus") 
      .MsmqTransport() 
      .UnicastBus() 
      .LoadMessageHandlers() 
      .CreateBus() 
      .Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install()); 

У меня также есть IMutateTransportMessages класс, выполненный с

 Configure.Instance.Configurer.ConfigureComponent<TransportMessageCompressionMutator>(DependencyLifecycle.InstancePerCall); 

Проблема, которую я получаю при вызове Bus.Send с помощью ProcessAttachmentCommand, не получает ничего. Когда конечная точка остановлена, я даже не вижу сообщений, появляющихся в очереди конечных точек.

С точки останова в MutateOutgoing способе TransportMessageCompressionMutator я могу видеть исходящее сообщение, поэтому он выглядит как вызов Bus.Send в порядке, но это, похоже, не собирается в конечную точку.

Есть ли где-нибудь еще, кроме конфигурации, которую я включил, которая может повлиять на доставку сообщений? И есть ли способ на уровне сообщений, чтобы увидеть, куда они направлены?

Мое устройство NServiceBus не регистрирует никаких ошибок, это похоже на то, что сообщения просто исчезают. Это самое запутанное!

+0

Является ли attatchments q транзакционным? Оказывается ли что-то в очереди сообщений msmq? Включите ведение журнала на q, чтобы узнать, есть ли сообщения, обработанные из этого q. –

+0

@ AndreasÖhlund Я считаю, что q является транзакционным. Очередь создается NServiceBus автоматически - NSB создает транзакционные очереди по умолчанию? Я не вижу сообщений в очереди с мертвой буквой. С помощью журналирования я вижу другие типы сообщений, идущие в очереди, но сообщение ProcessAttachmentCommand не достигает очереди вложений. –

+0

Да NSB создает транзакцию. Это работает, если вы отключите свой мутатор? –

ответ

3

Оказалось, что это ошибка, вызванная изменением на MessageEndpointMappings. Версия, опубликованная в моем вопросе, на самом деле не используется. Это фактическая версия:

<UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="GatewayMessages.ProcessAttachmentCommand, GatewayMessages" Endpoint="Attachments"/> 
     <add Messages="GatewayMessages" Endpoint="Services.Saga"/> 
    </MessageEndpointMappings> 
</UnicastBusConfig> 

Второй MessageEndpointMappings ушел в и NSB использовал этот конфиг, чтобы определить назначение всех классов сообщений в пределах GatewayMessages сборки.

А, человеческая ошибка!

+0

Пожалуйста, отметьте как принятый –

+0

@AdamFyles Done! Это был долгий праздничный уик-энд в Великобритании. –