Azure Servicebus Конкурирующие потребители с циклическим перебором - PullRequest
0 голосов
/ 30 мая 2020

Означают ли конкурирующие потребители Azure очереди / подписки ServiceBus циклический перебор?

Я возвращаюсь к вопросу Я задал некоторое время назад и провожу еще немного тестов.

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

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

Установка MaxConcurrentCalls = 1 внезапно вызывает отправку альтернативных сообщений конкурирующим потребителям. (Обратите внимание, что здесь я вообще не устанавливаю PrefetchCount)

Ожидается ли это? Мы масштабируемся, и мне нужен клиент для одновременной обработки нескольких сообщений, но в 90% случаев только один экземпляр службы обрабатывает все ... остальные простаивают.

FWIW, Вот пример проекта на Github на основе стандартной документации MS

1 Ответ

0 голосов
/ 31 мая 2020

При установке MaxConcurrentCalls на одно сообщение без предварительной выборки (PrefetchCount) вы просите брокера предоставить только одно сообщение запрашивающему потребителю. Предполагая, что у брокера есть несколько сообщений, каждый потребитель получит одно сообщение для обработки и получит другое сообщение после завершения предыдущего сообщения и так далее. В зависимости от задержки и скорости обработки сообщения будут распределяться между потребителями по запросу. Не будет никакого сходства или циклического присвоения. Что происходит в порядке очереди.

Ожидается ли это?

Да.

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

Настройка PrefetchCount и MaxConcurrentCalls которые не слишком жадны, дадут вам некоторое распределение, но если вы ищете равномерного распределения среди экземпляров вашего потребителя, этого не произойдет. Ответ на этот вопрос уже был дан в сообщении , на которое вы ссылаетесь.

...