Как читать сообщения из раздела, используя несколько подписчиков одновременно?

#azure #azureservicebus #azure-servicebus-topics #azure-servicebus-subscriptions

#azure #azureservicebus #azure-servicebus-темы #azure-servicebus-подписки

Вопрос:

Я работаю над темой Azure ServiceBus-Подписки. Я создал одну тему и две подписки в пространстве имен Service Bus. В моем текущем приложении я могу отправлять сообщения в раздел, после чего я получаю сообщения с помощью подписчиков.

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

Я написал эту строку в своем коде после обработки сообщения из темы

 await subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
  

Я следовал этой документации для реализации вышеупомянутого сценария.

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

Ответ №1:

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

Либо произошла логическая ошибка обработки, и сообщение повторяется до тех пор, пока оно не будет перемещено в очередь нерассмотренных писем, либо у вас MaxDeliveryCount установлена одна попытка обработки. В любом случае, проверьте DeadLetterReason и DeadLetterErrorDescription заголовки / свойства на предмет причины, по которой сообщение было перемещено в очередь просроченных писем.

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

Служебная шина Azure поддерживает шаблон конкурирующих потребителей, вам не нужно делать ничего особенного.

Комментарии:

1. @Спасибо, Шон, я установил Max Delivery Count как 1 для своего подписчика. И я проверил deadLetterReason в DLQ, который содержит сообщение как MaxDeliveryCountExceeded . Например, если у меня 3 подписчика в одной теме, то мне нужно задать 3 как Max Delivery Count правильно ли это?

2. Предлагаю ознакомиться с режимом доставки PeekLock и шаблоном конкурирующих потребителей . Это две разные вещи, которые помогут понять, как использовать MaxDeliveryCount (учет сбоев в обработке, периодических проблем и т.д.) И как используются посреднические сообщения. Если вы хотите, чтобы каждый подписчик получал сообщение, вам потребуется иметь объект подписки для каждого подписчика . Вот как работает pub / sub.