2016-03-30 4 views
0

Я запускаю конечную точку NServiceBus на рабочем месте Azure. В настоящий момент я отправляю всю диагностику в хранилище таблиц. Я получал сообщения в своем DLQ, и я не мог понять, почему у меня не было никаких исключений, зарегистрированных в моем хранилище таблиц.Исключения NServiceBus зарегистрированы как сообщения INFO

Оказывается, NSB регистрирует исключения как INFO, поэтому я не мог легко заметить их между всеми фактическими подробными протоколами.

В моем случае зависимости обработчика команд не могут быть разрешены, поэтому Autofac генерирует исключение. Я полностью понимаю, почему выбрано исключение, я просто не понимаю, почему они зарегистрированы как INFO. Сообщение заканчивается в моем DLQ, и у меня есть только INFO-trace, чтобы понять, почему.

Есть ли причина, по которой исключения обрабатываются таким образом в NSB?

+0

Когда вы говорите «Оказывается, что NSB регистрирует исключения как INFO», вы имеете в виду, что обработчик не загружает исключения или буквально все исключения? Если обработчик загружен и генерируется исключение, оно будет регистрироваться как ошибка. Не могли бы вы прояснить? –

+0

Я имею в виду, что обработчик, не загружаемый, отображается как INFO в журнале: 2016-03-31 08: 32: 45.910 INFO NServiceBus.Unicast.Transport.TransportReceiver Не удалось обработать сообщение Autofac.Core.DependencyResolutionException: ни один из конструкторы, найденные с помощью «Autofac.Core.Activators.Reflection.DefaultConstructorFinder» типа «CommandHandler», могут быть вызваны доступными службами и параметрами Я ожидаю, что это будет регистрироваться как ошибка, а не INFO. – Laila

ответ

1

NServiceBus не регистрирует проблему с контейнером как ошибку, поскольку это происходит во время попытки обработки сообщения. Будет предпринята попытка повторного запуска первого уровня и повторного повторения второго уровня. Когда выполняется SLR, он запишет WARN о повторном попытке. В конечном итоге сообщение не будет обработано, и сообщение ERROR будет зарегистрировано. NSB and Autofac sample можно использовать для воспроизведения.

Когда конечная точка работает с масштабируются из роли и MadDeliveryCount не является достаточно большим, чтобы вместить все экземпляры роли и повторите подсчет, что каждый экземпляр будет держать, это приведет к DeliveryCount достигая это максимум, а NServiceBus экземпляр конечной точки по-прежнему считает, что он имеет попыток до отправки сообщения в очередь ошибок и регистрации ошибки. Подобно question here Я бы рекомендовал увеличить MaxDeliveryCount.

Существует открытый NServiceBus issue, чтобы иметь встроенную поддержку счетчика зеркальных камер. Вы можете добавить свой голос в проблему. Следующая версия NServiceBus (V6) будет регистрировать идентификатор сообщения вместе с исключением, чтобы вы, по крайней мере, могли коррелировать между сообщением в DLQ и файле журнала.