0

Я использую подписку на служебную шину azure и темы для отправки заказов и получения заказов. У нас есть приложение Windows, которое вытягивает заказы с помощью веб-api из подписки на служебную шину.Не получать все брокерские сообщения от подписки на служебную шину azure

Предположим, если у вас нет учетной записи и у вас есть 5 заказов. Если пользователь выйдет из приложения Windows, мы разблокируем сообщения с шиной служебной шины. и если пользователь регистрируется снова через 5 минут или меньше, мы не получаем все заказы от шинной служебной шины. Его приближается как 3 или 4 иногда.

Может ли кто-нибудь помочь мне по этой проблеме, почему я не получаю все 5 заказов еще раз. Я использую метод ReceiveBatch для подписки clinet для вытягивания сообщений.

+0

Не могли бы вы подробнее рассказать о втором абзаце? Что значит «f пользователь выходит из приложения Windows, а затем мы разблокируем сообщения с шины Azure Service»? Кроме того, когда пользователь вошел в систему, вы снимаете все сообщения? –

+0

Привет, Шон, я имею в виду, что в приложении Windows есть функция входа/выхода из системы. Когда пользователь входит в систему, мы вытягиваем сообщения из azure в методе peeklock, а время блокировки сообщения устанавливается на 5 минут, так как нам нужно некоторое время для обработки сообщений. Если мы закончили с сообщением, мы отметим его завершение от подписки на служебную шину. Если мы не разблокируем сообщения, когда пользователь выйдет из системы, мы не получим сообщения до тех пор, пока они не будут разблокированы автоматически с помощью azure. Поэтому, когда пользователь выходит из системы, мы вручную отменяем сообщение от azure, чтобы другие пользователи приложений Windows могли получать эти сообщения. –

+0

Это также может быть проблема с истечением срока действия TTL (TimeToLive). –

ответ

0

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

  1. Проверьте MaxDeliveryCount на лице
  2. Проверьте вы entity`s DLQ, чтобы проверить, является ли это поведение
  3. В случае, если они DLQed, я предлагаю посмотреть в centralising your DLQs для упрощения обработки ошибок