NServiceBus 3.0 MarkAsComplete () вызывает исключение NServiceBus.Unicast.Queuing.QueueNotFoundException

Я обновил некоторые конечные точки NSB 2.6 для использования NSB 3.0, и теперь они работают по большей части. В одном из своих обработчиков в саге я обновляю репо, а затем MarkAsComplete (). В файле журнала я вижу следующую ошибку;

2012-03-11 16: 45: 47,667 [Worker.14] ПРЕДУПРЕЖДЕНИЕ NServiceBus.Unicast.UnicastBus - MyHandlerABC не удалось обработать сообщение. NServiceBus.Unicast.Queuing.QueueNotFoundException: возникло исключение типа «NServiceBus.Unicast.Queuing.QueueNotFoundException». в NServiceBus.Unicast.Queuing.Msmq.MsmqMessageSender.NServiceBus.Unicast.Queuing.ISendMessages.Send (сообщение TransportMessage, адрес адрес) в NServiceBus.Unicast.UnicastBus.ClearTimeoutspatagerBus.Send (GuagisSagaSaid sagai ISaga saga) в NServiceBus.Sagas.Impl.SagaDispatcherFactory. ‹> C_ DisplayClass6.b _1 () в NServiceBus.Unicast.UnicastBus.‹> C_ DisplayClass20.b _1d ( Отправка действия) в действии System.Collections.Generic.List1.ForEach(Action1) в NServiceBus.Unicast.UnicastBus.DispatchMessageToHandlersBasedOnType (построитель IBuilder, Object toHandle) 2012-03-11 16: 45: 47,668 [Worker.14] WARN NServiceBus.Uport. Transactional.TransactionalTransport - Не удалось создать событие «транспортное сообщение получено» для сообщения с идентификатором = c2bf13f9-7138-4df5-aa42-9cc3f9817e78 \ 13152 NServiceBus.Unicast.Transport.TransportMessageHandlingFailedException: исключение типа NServiceBus.Unic ssageHandlingFailedException ». в NServiceBus.Unicast.UnicastBus.DispatchMessageToHandlersBasedOnType (построитель IBuilder, Object toHandle) в NServiceBus.Unicast.UnicastBus.HandleMessage (IBuilder builder, TransportMessage m) в NServiceBessageBessage.Unicast UnicastBus.TransportMessageReceived (отправитель объекта, TransportMessageReceivedEventArgs e) в System.EventHandler`1.Invoke (отправитель объекта, TEventArgs e) в NServiceBus.Unicast.Transport.Transactional.TransactionalTransport.OnTransportMessageReceived (MSessageReceived)

Это происходит после того, как NSB завершил обработку сообщения (я веду журнал как последнюю строку в обработчике, и она появляется сразу над трассировкой стека выше)

Эти конечные точки работали до обновления до NSB3.0, поэтому я уверен, что мне где-то не хватает некоторых настроек конфигурации. Требуется ли что-то новое, чтобы саги работали в NSB3.0?


person plenderj    schedule 11.03.2012    source источник
comment
Я добавил вызов метода MarkAsComplete () в другой обработчик и попробовал это, и это тоже взорвалось. Итак, с какой очередью пытается связаться NSB? ('NServiceBus.Unicast.Queuing.QueueNotFoundException')   -  person plenderj    schedule 12.03.2012
comment
Я закомментировал все строки MarkAsComplete () на данный момент, чтобы это снова заработало.   -  person plenderj    schedule 12.03.2012


Ответы (2)


Когда вы завершаете сагу, диспетчер тайм-аута автоматически уведомляется, чтобы он мог очистить любые невыполненные тайм-ауты для этого экземпляра саги.

public void ClearTimeoutsFor(Guid sagaId)
{
        var controlMessage = ControlMessage.Create();

        controlMessage.Headers[Headers.SagaId] = sagaId.ToString();
        controlMessage.Headers[Headers.ClearTimeouts] = true.ToString();

        MessageSender.Send(controlMessage, TimeoutManagerAddress);
}

Можете ли вы убедиться, что у вас есть очередь под названием {endpointname}. Таймауты на вашей машине?

person Andreas Öhlund    schedule 12.03.2012
comment
Так и должно быть - спасибо, Андреас! Попробую позже, когда вернусь домой. Я не создавал эти дополнительные очереди на тайм-аут - person plenderj; 13.03.2012

В версии 3.0 вы должны назвать свои конечные точки, иначе имя конечной точки по умолчанию будет соответствовать пространству имен вашей реализации IConfigureThisEndpoint. Я предполагаю, что имя очереди, которое вы использовали, не соответствует имени конечной точки назначения, и если вы позволите конечной точке создавать очереди, имя очереди изменится. Надеюсь это поможет.

person Adam Fyles    schedule 12.03.2012