NServiceBus MSMQ Отправить вопрос
-
05-07-2019 - |
Вопрос
У меня проблемы с отправкой сообщения через NServiceBus. У меня есть веб-приложение ASP.Net MVC, разработанное на Win7 x64, я настроил свой web.config как
<MsmqTransportConfig InputQueue="worker" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="PricingInformation.Messages" Endpoint="worker2" />
</MessageEndpointMappings> </UnicastBusConfig>
В application_start я подключаю следующее:
var bus = NServiceBus.Configure.WithWeb()
.StructureMapBuilder()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(false)
.PurgeOnStartup(false)
.UnicastBus()
.ImpersonateSender(false)
.CreateBus()
.Start();
Когда интересующее меня действие происходит в приложении, которое я запускаю
public override void HandleEvent(SupplierPricingUpdatedEvent updatedEvent)
{
bus.Send(new ModelSupplierDetailsUpdatedMessage() {Id = updatedEvent.Id})
return;
}
ModelSupplierDetailsUpdatedMessage - это простой класс в PricingInformation.Messages, использующий маркер интерфейса IMessage и украшенный атрибутом Serializable. Р>
Очереди MSMQ настроены, а не транзакционны, и все, включая NETWORK SERVICE и IIS_IUSRS, имеют полный контроль (в мерах по устранению неполадок)
log4net показывает следующее:
DEBUG NServiceBus.Utils.MsmqUtilities 14 - Checking if queue exists: worker.
DEBUG NServiceBus.Utils.MsmqUtilities 14 - Проверка наличия очереди: ошибка. DEBUG NServiceBus.Unicast.UnicastBus Worker.15 - Вызов «HandleBeginMessage» для NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule ИНФОРМАЦИЯ NServiceBus.Unicast.UnicastBus Worker.15 - работник инициализирован. DEBUG NServiceBus.Unicast.UnicastBus Worker.15 - Вызов «HandleEndMessage» для NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule DEBUG NServiceBus.Unicast.UnicastBus 9 - Отправка сообщения . 734e2fdd726d \ 8267 до целевого работника2.
Тем не менее, что бы я ни пытался, и что бы я ни настраивал (уже три часа у него), сообщение никогда не появляется в очереди. Я не могу найти исключение, и у меня есть журнал уровня отладки на все .. Это, вероятно, что-то простое поможет
Решение
Проблема в том, что если вы вручную настроите свои очереди как нетранзакционные, то это не будет работать. Установка NServiceBus < IsTransactional " Значение false не означает, что вы можете работать с нетранзакционными очередями.
Попробуйте удалить очереди и воссоздать их как транзакционные или, если вы используете бета-версию v2.0, просто разрешите NServiceBus создавать очереди для вас.