Почему мои сообщения всегда доставляются в очередь недоставленных сообщений в служебной шине Azure? - PullRequest
1 голос
/ 18 октября 2019

C # .NetCore 2.2 - служебная шина Azure 3.4.0

У меня есть 3 очереди в служебной шине Azure с одинаковыми свойствами. При отправке сообщений в эти очереди сообщения в одной из очередей всегда доставляются в очереди мертвых писем, в то время как другие 2 очереди получают активные сообщения.

Я попытался поиграть со свойствами - увеличить TTL, максимальное количество доставоки т. д. Свойства всех трех очередей одинаковы, единственное отличие состоит в названии очередей.

Я использовал этот учебник - https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues

свойства очереди image

Статическая асинхронная задача SendMessagesAsync (int numberOfMessagesToSend) {

try

{


    for (var i = 0; i < numberOfMessagesToSend; i++)

    {

        // Create a new message to send to the queue.

        string messageBody = $"Message {i}";

        var message = new Message(Encoding.UTF8.GetBytes(messageBody));

        Console.WriteLine($"Sending message: {messageBody}");

        // Send the message to the queue.
        await queueClient.SendAsync(message);
    }
}
catch (Exception exception)
{
    Console.WriteLine($"{DateTime.Now} :: Exception: {exception.Message}");
}

}

Как предотвратить отправку сообщений в очередь недоставленных сообщений? Почему это происходит только с одной очередью, а не с двумя?

Ответы [ 3 ]

1 голос
/ 18 октября 2019

Когда сообщения помечены буквами, существует причина, по которой пользовательское свойство добавляется. Проверьте это свойство, чтобы увидеть причину и устранить неполадки соответственно. В частности, проверьте пользовательские свойства DeadLetterReason и DeadLetterErrorDescription.

0 голосов
/ 12 ноября 2019

Обычные причины, по которым сообщение является недопустимым:

  • Превышено максимальное число переходов
  • Идентификатор сеанса равен нулю
  • TTLExpiredException
  • HeaderSizeExceeded

Сообщения также могли быть заброшены из-за некоторых ошибок при получении сообщения из очереди. Как упоминал Шон Фельдман, изучение свойств DeadLetterReason и DeadLetterDescription поможет вам четко диагностировать причину ошибки.

Также попытайтесь увеличить или установить время жизни отправленного сообщения, если DeadLetterReason имеет значение TTLExpiredException. Потому что, если вы установили время жизни сообщения на более низкое значение, тогда оно переопределит свойство времени жизни в очереди.

Проверьте, находится ли в очереди очередь, в которой сообщения становятся мертвыми буквамиявляется очередью с включенным сеансом, и отправленное сообщение имеет установленное значение идентификатора сеанса.

0 голосов
/ 18 октября 2019

Не видя ваше приложение / сообщения, трудно помочь. Но, вероятно, произошла ошибка в приложении, которое пытается получить сообщение. Поскольку оно не может быть завершено, сообщение отправляется в очередь недоставленных сообщений.

Зарегистрируйте сообщения из этой конкретной очереди и посмотрите, отсутствуют ли какие-либо обязательные свойства. Иногда вы пытаетесь десериализовать в несовместимый тип.

Цель очереди недоставленных сообщений - хранить сообщения, которые не могут быть доставлены получателю, или сообщения, которые не могут быть обработаны.

...