我在遷移到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