Изменение весов потребителей RabbitMQ - PullRequest
1 голос
/ 29 апреля 2020

Насколько я вижу в документации rabbitmq , сообщения в очереди отправляются подключенным потребителям в режиме round robin . Тем не менее, я хочу, чтобы один из моих потребителей принял, скажем, 1% сообщений для пилотного тестирования .

Можно ли этого добиться? Любые идеи будут полезны.

Спасибо

1 Ответ

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

Я думаю, что вы ищете потребительские приоритеты .

RabbitMQ будет отправлять сообщения потребителям с высоким приоритетом чаще, чем потребителям с низким приоритетом. Единственный раз, когда он получит go для потребителя с низким приоритетом, это когда потребитель с высоким приоритетом заблокирован. Потребитель блокируется при достижении максимального количества неподтвержденных сообщений. Это можно установить, играя с basic.qos для потребителя.

Приоритет для потребителей можно установить следующим образом:

Установите x-priority аргумент в методе basic.consume для целочисленного значения. Потребители, которые не указывают значение, имеют приоритет 0. Большие числа указывают на более высокий приоритет, и могут использоваться как положительные, так и отрицательные числа.

Таким образом, вы можете определить приоритет для вашего тестового потребителя и других потребителей. Вот пример, предоставленный документацией RabbitMQ.

Channel channel = ...;
Consumer consumer = ...;
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-priority", 10);
channel.basicConsume("my-queue", false, args, consumer);

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

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