我已经升级了一些NSB2.6端点以使用NSB3.0,现在它们大部分都在工作。在我的一个saga处理程序中,我更新了一个回购,然后更新了MarkAsComplete()。在日志文件中,我看到以下错误;
2012-03-11 16:45:47,667工作人员。14警告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 (地址) at NServiceBus.Unicast.UnicastBus.ClearTimeoutsFor(Guid sagaId) at NServiceBus.Sagas.Impl.SagaDispatcherFactory.NotifyTimeoutManagerThatSagaHasCompleted(ISaga saga(在NServiceBus.Sagas.Impl.SagaDispatcherFactory.<>c_DisplayClass6.b_1() at NServiceBus.Unicast.UnicastBus.<>c_DisplayClass20.b_1d(Action调度) at System.Collections.Generic.List1.ForEach(Action1 action) at NServiceBus.Unicast.UnicastBus.DispatchMessageToHandlersBasedOnType(IBuilder builder,对象: 2012-03-11 16:45:47,668 Worker.14警告NServiceBus.Unicast.Transport.Transactional.TransactionalTransport -为ID=c2bf13f9-7138-4df5-a42-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发件人,TransportMessageReceivedEventArgs e)在System.EventHandler‘1.Object(对象发送方,TEventArgs e)在NServiceBus.Unicast.Transport.Transactional.TransactionalTransport.OnTransportMessageReceived(TransportMessage msg)
这发生在NSB处理完消息之后(我将日志记录作为处理程序中的最后一行,它就出现在上面的堆栈跟踪上方)。
这些端点在升级到NSB3.0之前就已经开始工作了,所以我肯定在某个地方遗漏了一些配置设置。在NSB3.0中,是否需要一些新的东西来使sagas工作?
发布于 2012-03-12 15:11:39
当您完成一个传奇,超时管理器自动通知,以便它可以清除任何悬而未决的超时为该传奇实例。
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}的队列。在你的机器上暂停?
发布于 2012-03-12 12:49:20
在3.0中,必须为端点命名,否则端点名称将默认为IConfigureThisEndpoint实现的命名空间。我的猜测是,您使用的队列名与目标端点的名称不匹配,如果让端点创建队列,队列名就会更改。希望这能有所帮助。
https://stackoverflow.com/questions/9658830
复制相似问题