Точная информация об исключении, почему сообщения не имеют буквенного обозначения

У меня есть приложение, которое отправляет сообщения в очередь служебной шины Azure. У меня также есть другое приложение, которое читает сообщения из этой очереди и обрабатывает затем отправляет обработанное сообщение в тему.
Я вижу, что большинство моих сообщений перемещаются в dlq. Когда я вижу исключение в обозревателе служебной шины Azure, я вижу, что оно генерирует одно и то же исключение для всех сообщений - превышено максимальное количество повторных попыток. Я хочу знать фактическое исключение, из-за которого сообщение перемещено в dlq.
Где я могу найти подробности об этом исключении? Я считаю, что данные об этом исключении могут храниться где угодно?


person Amit    schedule 30.05.2017    source источник
comment
Вы имеете в виду, что вы видите maximum retry count exceeded из дополнительных свойств сообщения сообщения DLQ в проводнике служебной шины? Не могли бы вы увидеть подробное описание в свойстве DeadLetterErrorDescription? Кроме того, проверьте Как сообщения попадают в DLQ?   -  person Fei Han    schedule 31.05.2017
comment
Я также проверил описание deadlettererror, в нем говорится, что сообщение не может быть использовано после 10 попыток доставки .. Но когда я отлаживаю это сообщение о мертвом письме, оно выдает другое исключение, которое связано с некоторыми основными данными ... Эта информация, которую я хотел ..   -  person Amit    schedule 31.05.2017
comment
Привет, Фред! Мне нужно знать информацию об исключении, когда происходит мертвое письмо на уровне приложения. Где эта информация фиксируется? Можете ли вы помочь мне с этим ?   -  person Amit    schedule 31.05.2017


Ответы (1)


В описании deadlettererror говорится, что сообщение не может быть использовано после 10 попыток доставки.

Если сообщение превышает MaxDeliveryCount (значение по умолчанию 10), оно будет перемещено в DLQ. Если вы прочитали "Как сообщения попадают в DLQ?", который я предоставил в комментарии, вы найдете приведенную ниже информацию в разделе «Превышение MaxDeliveryCount».

Каждый раз, когда сообщение было доставлено под блокировкой (ReceiveMode.PeekLock), но было либо явно отменено, либо срок блокировки истек, BrokeredMessage.DeliveryCount сообщения увеличивается. Когда DeliveryCount превышает MaxDeliveryCount, сообщение перемещается в DLQ

Проверьте Продолжительность блокировки и убедитесь, что ваше клиентское приложение может принять сообщение в течение интервала ожидания блокировки. Кроме того, если возможно, вы можете установить большое число для MaxDeliveryCount.

введите здесь описание изображения

person Fei Han    schedule 01.06.2017
comment
Примечание: обычно мы проверяем и обрабатываем сообщения как в очереди, так и в DLQ, чтобы гарантировать доставку сообщений. - person Fei Han; 01.06.2017
comment
Спасибо за предоставленную информацию. Я просмотрел статью. Но я все еще не уверен, где фиксируются исключения мертвых букв на уровне приложения .. Действительно ли они фиксируются или когда приложение генерирует исключение, которое повторяется 10 раз, оно генерирует исключение maxdeliverycount .. Я просто хочу знать, были ли исключения, созданные приложением захвачены или нет. Если да, то как мы можем получить к ним доступ? - person Amit; 03.06.2017
comment
Пожалуйста, попробуйте захватить исключение в блоке try-catch try { //process message } catch (Exception expt) { Exception ex = expt; //log exception and delivery count Console.WriteLine(String.Format("Message DeliveryCount: {0}; Exception: {1}", message.DeliveryCount.ToString(), ex.Message)); } - person Fei Han; 06.06.2017