Как настроить очередь rabbitmq на потребление 20 сообщений в секунду? если у меня несколько очередей, можно ли это сделать для каждой очереди? такой как:
q1-> 20 сообщений в секунду
q2-> 15 сообщений в секунду
При использовании потребителей, управляемых сообщениями, вам нужно будет выполнить регулирование в самом слушателе - добавить Thread.sleep()
- или добавить совет в цепочку рекомендаций контейнера слушателя, чтобы отделить логику от вашего бизнес-кода.
Как правило, при желании контролировать скорость потребления может быть проще использовать операцию RabbitTemplate.receive()
(или RabbitTempalte.execute()
с channel.basicGet()
, если вы хотите отложить подтверждение до обработки сообщения).
Thread.Sleep()
, вероятно, недостаточно гранулирован даже для указанной здесь относительно грубой точности, особенно если приложение является многопоточным. Вам понадобится какая-то спин-блокировка, чтобы гарантировать точность, но даже тогда мне интересно, не проблема ли это XY.
Вы не можете настроить очередь в RabbitMQ для обслуживания ограниченного количества сообщений в секунду, вы должны делать это программно.
Уродливая техника состоит в том, чтобы использовать одного слушателя для этой очереди (которая потребляет сообщение за раз) и добавить Thread.sleep(100L)
в начале этого метода для 10 мс / с или Thread.sleep(66L)
для 15 мс / с (в более общем случае, подождите, пока 1000/nMesgPerSecond
). Это гарантирует более или менее нижнюю границу времени, затрачиваемого этим методом.
Что ты пытаешься сделать? Вообще говоря, вы хотите, чтобы потребители обрабатывали сообщения как можно быстрее, поэтому, на первый взгляд, это может показаться довольно странным.