我在迁移到NService 4(4.0.4)后遇到问题。当消息处理失败时,它看起来像整个NServiceBus停止并且没有做任何工作(来自MSMQ的消息不再被消耗)。 寻找到日志后,我发现了以下错误:NServiceBus 4无法转发失败的消息,找不到队列
NServiceBus.log:
2013年10月2日17:49:31.5786 |致命的| 110 |错误管理器无法处理带有id的失败消息aa32dce1-f408-4f6d-b448-a24b0118ec27 System.InvalidOperationException:无法将失败的消息转发到错误队列'administration.worker @ localhost.Retries @ localhost',因为找不到它。 ---> NServiceBus.Unicast.Queuing.QueueNotFoundException:无法发送消息到地址:[administration.worker @ localhost.Retries @ localhost] ---> System.Messaging.MessageQueueException:队列不存在或者您没有足够的权限来执行操作。 在System.Messaging.MessageQueue.MQCacheableInfo.get_WriteHandle() 在System.Messaging.MessageQueue.StaleSafeSendMessage(MQPROPS性能,ITransaction交易) 在System.Messaging.MessageQueue.StaleSafeSendMessage(MQPROPS性能,IntPtr的交易) 在System.Messaging .MessageQueue.SendInternal(Object obj,MessageQueueTransaction internalTransaction,MessageQueueTransactionType transactionType) at NServiceBus.Transports.Msmq.MsmqMessageSender.Send(TransportMessage message,Address address)in c:\ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Transports \ Msmq \ MsmqMessageSender.cs:60行 ---内部异常堆栈跟踪--- 在c:\ BuildAgent \ w中NServiceBus.Transports.Msmq.MsmqMessageSender.Send(TransportMessage消息,地址)的结束org \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Transports \ Msmq \ MsmqMessageSender.cs:line 76 at NServiceBus.Faults.Forwarder.FaultManager.SendFailureMessage(TransportMessage message,Exception e,Boolean serializationException)in c:\ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Faults \ Forwarder \ FaultManager.cs:line 48 --- End of internal exception stack trace --- at NServiceBus.Faults.Forwarder.FaultManager.SendFailureMessage(TransportMessage message,Exception e,Boolean serializationException )in c:\ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Faults \ Forwarder \ FaultManager.cs:line 78 at NServiceBus.Unicast.Transport.FirstLevelRetries.TryInvokeFaultManager(TransportMessage message,Exception exception)in c:\ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Unicast \ Transport \ FirstLevelRetries.cs:line 71InnerExceptionNServiceBus.Unicast.Queuin g.QueueNotFoundException:无法将消息发送到地址:[administration.worker @ localhost.Retries @ localhost] ---> System.Messaging.MessageQueueException:队列不存在或您没有足够的权限执行操作。 在System.Messaging.MessageQueue.MQCacheableInfo.get_WriteHandle() 在System.Messaging.MessageQueue.StaleSafeSendMessage(MQPROPS性能,ITransaction交易) 在System.Messaging.MessageQueue.StaleSafeSendMessage(MQPROPS性能,IntPtr的交易) 在System.Messaging .MessageQueue.SendInternal(Object obj,MessageQueueTransaction internalTransaction,MessageQueueTransactionType transactionType) at NServiceBus.Transports.Msmq.MsmqMessageSender.Send(TransportMessage message,Address address)in c:\ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Transports \ Msmq \ MsmqMessageSender.cs:60行 ---内部异常堆栈跟踪--- 在c:\ BuildAgent \ w中NServiceBus.Transports.Msmq.MsmqMessageSender.Send(TransportMessage消息,地址)的结束org \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Transports \ Msmq \ MsmqMessageSender.cs:line 76 at NServiceBus.Faults.Forwarder.FaultManager.SendFailureMessage(TransportMessage message,Exception e,Boolean serializationException)in c:\ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Faults \ Forwarder \ FaultManager.cs:line 48InnerExceptionSystem.Messaging。MessageQueueException(0x80004005):队列不存在或您没有足够的权限执行操作。 在System.Messaging.MessageQueue.MQCacheableInfo.get_WriteHandle() 在System.Messaging.MessageQueue.StaleSafeSendMessage(MQPROPS性能,ITransaction交易) 在System.Messaging.MessageQueue.StaleSafeSendMessage(MQPROPS性能,IntPtr的交易) 在System.Messaging .MessageQueue.SendInternal(Object obj,MessageQueueTransaction internalTransaction,MessageQueueTransactionType transactionType) at NServiceBus.Transports.Msmq.MsmqMessageSender.Send(TransportMessage message,Address address)in c:\ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Transports \ Msmq \ MsmqMessageSender.cs:line 60
MsmqDequeueStrategy.log有很多:
2013-10-02 17:49:32.5579 |错误| 57 |处理消息时出错。 System.ObjectDisposedException:信号量已被丢弃。 (C:\ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Transports \ Msmq \ MsmqDequeueStrategy.cs)中的NServiceBus.Transports.Msmq.MsmqDequeueStrategy.Action()处的System.Threading.SemaphoreSlim.Release(Int32 releaseCount) 在System.Threading.Tasks.Task.Execute()
FaultManager.log线227 :
2013年10月2日17:49:31.5746 |致命的| 110 |无法将失败的消息转发到错误队列'administration.worker @ localhost.Retries @ localhost',因为找不到它。
我的init NSB如下:
Configure.Serialization.Xml();
Configure.Features.Enable<TimeoutManager>();
Configure.Features.Enable<Sagas>();
var conf = Configure.With(assemblies)
.CustomConfigurationSource(new BusConfigSource(assemblies))
.DefineEndpointName(ConfigurationManager.AppSettings["InputQueue"])
.CastleWindsorBuilder(container)
.MessageForwardingInCaseOfFault()
.UseInMemoryTimeoutPersister()
.UseTransport<Msmq>()
.PurgeOnStartup(false)
.FileShareDataBus(WebConfigurationManager.AppSettings["NServiceBusFileShare"])
.UnicastBus()
.LoadMessageHandlers()
.MsmqSubscriptionStorage()
.CreateBus()
.Start(() => Configure.Instance.ForInstallationOn<Windows>().Install());
编辑:更多的信息。 我在IIS中托管NSB。我发布,发送和处理消息。
Web.config文件看起来是这样的:
它看起来像一个配置错误,因为它试图发送到队列是相当明显畸形。你能发布你的配置吗? –
我注意到,在禁用SecondLevelRetries之后,事情开始奏效。不过,我希望他们运行。 另外我试过启用超时,我也有类似的问题。我得到错误说2013-10-03 13:35:12.8477 |警告| 59 |处理失败的消息。 NServiceBus.Unicast.Queuing.QueueNotFoundException:无法发送消息到地址:[administration.worker @ localhost.Timeouts @ localhost] ---> System.Messaging.MessageQueueException:队列不存在或者您没有足够的权限执行操作。 – stachu