У меня возникают проблемы после перехода на NService 4 (4.0.4). Когда обработка сообщений терпит неудачу, похоже, что весь NServiceBus останавливается и не выполняет никакой работы (сообщения от MSMQ больше не потребляются). После просмотра в журналах, я нашел следующие ошибки:NServiceBus 4 Не удалось переправить сообщение об ошибке, очередь не найдена
NServiceBus.log:
2013-10-02 17: 49: 31.5786 | FATAL | 110 | Менеджер неисправностей не смог обработать сообщение об ошибке с идентификатором aa32dce1-f408-4f6d-b448-a24b0118ec27 System.InvalidOperationException: Не удалось переправить сообщение об ошибке в очередь ошибок «administrator.worker @ localhost.Retries @ localhost», поскольку его не удалось найти. ---> NServiceBus.Unicast.Queuing.QueueNotFoundException: Не удалось отправить сообщение по адресу: [administrator.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) в NServiceBus.Transports.Msmq.MsmqMessageSender.Send (сообщение TransportMessage, адрес адреса) в c: \ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Transports \ Msmq \ MsmqMessageSender.cs: строка 60 --- Конец внутренней стеки стека исключений --- в NServiceBus.Transports.Msmq.MsmqMessageSender.Send (сообщение TransportMessage, адрес адреса) в c: \ BuildAgent \ w ork \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Transports \ Msmq \ MsmqMessageSender.cs: строка 76 в NServiceBus.Faults.Forwarder.FaultManager.SendFailureMessage (сообщение TransportMessage, исключение e, логическое исключение сериализации) в c: \ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Faults \ Forwarder \ FaultManager.cs: строка 48 --- Конец внутренней стеки стека исключений --- в NServiceBus.Faults.Forwarder.FaultManager.SendFailureMessage (сообщение TransportMessage, исключение e, логическая сериализация исключений) в c: \ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Faults \ Forwarder \ FaultManager.cs: строка 78 в NServiceBus.Unicast.Transport.FirstLevelRetries.TryInvokeFaultManager (сообщение TransportMessage, исключение исключения) в c: \ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Unicast \ Transport \ FirstLevelRetries.cs: строка 71InnerExceptionNServiceBus.Unicast.Queuin g.QueueNotFoundException: Не удалось отправить сообщение по адресу: [administrator.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) в NServiceBus.Transports.Msmq.MsmqMessageSender.Send (сообщение TransportMessage, адрес адреса) в c: \ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Transports \ Msmq \ MsmqMessageSender.cs: строка 60 --- Конец внутренней стеки стека исключений --- в NServiceBus.Transports.Msmq.MsmqMessageSender.Send (сообщение TransportMessage, адрес адреса) в c: \ BuildAgent \ w ork \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Transports \ Msmq \ MsmqMessageSender.cs: строка 76 в NServiceBus.Faults.Forwarder.FaultManager.SendFailureMessage (сообщение TransportMessage, исключение e, логическое исключение сериализации) в c: \ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Faults \ Forwarder \ FaultManager.cs: строка 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) в NServiceBus.Transports.Msmq.MsmqMessageSender.Send (сообщение TransportMessage, адрес адреса) в c: \ BuildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Transports \ Msmq \ MsmqMessageSender.cs: строка 60
В MsmqDequeueStrategy.log много:
2013-10-02 17: 49: 32.5579 | ОШИБКА | 57 | Сообщение об ошибке обработки. System.ObjectDisposedException: Семафор был удален. в System.Threading.SemaphoreSlim.Release (Int32 releaseCount) в NServiceBus.Transports.Msmq.MsmqDequeueStrategy.Action() в C: \ BuildAgent \ работы \ d4de8921a0aabf04 \ SRC \ NServiceBus.Core \ транспорты \ Msmq \ MsmqDequeueStrategy.cs: линия 227 на System.Threading.Tasks.Task.Execute()
FaultManager.log:
2013-10-02 17: 49: 31,5746 | FATAL | 110 | Не удалось отправить сообщение об ошибке в очередь ошибок «administrator.worker @ localhost.Retries @ localhost», поскольку его не удалось найти.
I инициализации 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());
EDIT: Более подробную информацию. Я принимаю NSB в IIS. Я публикую, отправляю и обрабатываю сообщения.
Web.config выглядит следующим образом:
Похоже, что ошибка в конфигурации, поскольку очередь, которую он пытается отправить, явно искажена. Не могли бы вы разместить свой конфиг? –
Я заметил, что после отключения SecondLevelRetries все стало работать. Однако я хочу, чтобы они работали. Также я попытался включить таймауты, и у меня есть аналогичные проблемы. Я получаю сообщение об ошибке 2013-10-03 13: 35: 12.8477 | WARN | 59 | не удалось обработать сообщение. NServiceBus.Unicast.Queuing.QueueNotFoundException: Не удалось отправить сообщение по адресу: [administrator.worker @ localhost.Timeouts @ localhost] ---> System.Messaging.MessageQueueException: очередь не существует или у вас нет достаточных разрешений для выполнения операция. – stachu