Azure Servicebus Topi c Подписка конкурирующих потребителей, затронутых PrefetchCount - PullRequest
0 голосов
/ 09 января 2020

При использовании Azure ServiceBus Topi c Подписка с несколькими конкурирующими потребителями , я могу заставить потребителей проходить циклический перебор, только если для PrefetchCount SubscriptionClient не установлено .

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

Если я добавлю нагрузку (т. Е. Добавлю больше сообщений одновременно при подписке), тогда другие потребители получат некоторые сообщения, но загрузка распределяется неравномерно.

Использование очереди (и QueueClient ), сообщения более или менее равномерно распределяются среди клиентов - с любым PrefetchCount.

Примечание:

  • MaxConcurrentCalls является «высоким» значением ( 200)
  • Я использую режим PeekLock во всех случаях;
  • Подписки используют CorrelationFilter

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

Что я мог настроить неправильно? Или это ожидаемое поведение?

1 Ответ

2 голосов
/ 09 января 2020

Как очереди, так и подписки поддерживают конкурирующих потребителей одинаково. Предварительная выборка - это то, что не работает так, как вы могли бы ожидать. Когда вы просите предварительно выбрать N товаров, брокер не будет распределять их равномерно между конкурирующими потребителями. Скорее постараюсь дать каждому потребителю как можно больше. Поэтому, если у вас есть 10 сообщений и установлена ​​предварительная выборка 10, первый потребитель может получить все это, не оставляя ничего для второго потребителя.

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