NServiceBus 3.0 MarkAsComplete()导致NServiceBus.Unicast.Queuing.QueueNotFoundException

时间:2012-03-11 20:56:53

标签: nservicebus

我已经升级了一些NSB 2.6端点以使用NSB 3.0,现在让它们在大多数情况下工作。在我的一个传奇处理程序中,我更新了一个repo,然后是MarkAsComplete()。在日志文件中,我看到以下错误;

2012-03-11 16:45:47,667 [Worker.14] WARN NServiceBus.Unicast.UnicastBus - MyHandlerABC处理消息失败。 NServiceBus.Unicast.Queuing.QueueNotFoundException:抛出了类型'NServiceBus.Unicast.Queuing.QueueNotFoundException'的异常。    在NServiceBus.Unicast.Queuing.Msmq.MsmqMessageSender.NServiceBus.Unicast.Queuing.ISendMessages.Send(TransportMessage message,Address address)    在NServiceBus.Unicast.UnicastBus.ClearTimeoutsFor(Guid sagaId)    在NServiceBus.Sagas.Impl.SagaDispatcherFactory.NotifyTimeoutManagerThatSagaHasCompleted(ISaga saga)    在NServiceBus.Sagas.Impl.SagaDispatcherFactory。<> c_ DisplayClass6.b _1()    在NServiceBus.Unicast.UnicastBus。<> c_ DisplayClass20.b _1d(行动派遣)    在System.Collections.Generic.List 1.ForEach(Action 1个动作)    在NServiceBus.Unicast.UnicastBus.DispatchMessageToHandlersBasedOnType(IBuilder builder,Object toHandle) 2012-03-11 16:45:47,668 [Worker.14] WARN NServiceBus.Unicast.Transport.Transactional.TransactionalTransport - 为ID = c2bf13f9-7138-4df5-aa42-9cc3f9817e78 \ 13152的消息提出“收到传输消息”事件失败 NServiceBus.Unicast.Transport.TransportMessageHandlingFailedException:抛出了类型为“NServiceBus.Unicast.Transport.TransportMessageHandlingFailedException”的异常。    在NServiceBus.Unicast.UnicastBus.DispatchMessageToHandlersBasedOnType(IBuilder builder,Object toHandle)    在NServiceBus.Unicast.UnicastBus.HandleMessage(IBuilder builder,TransportMessage m)    在NServiceBus.Unicast.UnicastBus.HandleTransportMessage(IBuilder childBuilder,TransportMessage msg)    在NServiceBus.Unicast.UnicastBus.TransportMessageReceived(Object sender,TransportMessageReceivedEventArgs e)    在System.EventHandler`1.Invoke(对象发送者,TEventArgs e)    在NServiceBus.Unicast.Transport.Transactional.TransactionalTransport.OnTransportMessageReceived(TransportMessage msg)

这是在NSB处理完一条消息后发生的(我已将日志记录为处理程序中的最后一行,并且紧接在上面的堆栈跟踪上方)

这些端点在升级到NSB3.0之前正在工作,所以我确定我在某个地方缺少一些配置设置。在NSB3.0中有没有新的工作要求使用传真机吗?

2 个答案:

答案 0 :(得分:2)

当你完成一个saga时,会自动通知超时管理器,以便它可以清除该saga实例的任何未完成的超时。

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}的队列。机器超时?

答案 1 :(得分:0)

在3.0中,您必须为端点命名,否则端点名称将默认为IConfigureThisEndpoint实现的命名空间。我的猜测是您使用的队列名称与目标端点的名称不匹配,如果您让端点创建队列,则队列名称已更改。希望这会有所帮助。