Поведение RabbitListener с несколькими очередями

Каково поведение при использовании следующей конструкции (последняя версия Spring). Я не могу найти его в документации.

@RabbitListener(queues = {"q1", "q2", "q3"})
public class MyListener {

В каком порядке обрабатываются сообщения из трех очередей?


person coffee_machine    schedule 09.05.2016    source источник


Ответы (1)


Неопределено - 3 basicConsume операции выполняются на канале потребителя (если вы увеличиваете concurrentConsumers, это 3 на потребителя). Операции basicConsume обычно выполняются в том порядке, в котором определены очереди (во всех случаях, если только одна или несколько очередей временно не "отсутствуют").

Брокер будет отправлять сообщения из каждой очереди до prefetchCount (basicQos) для каждой очереди (по умолчанию 1).

Я не знаю фактического алгоритма, используемого брокером в этом сценарии, но вы должны предположить, что он неопределен - Spring AMQP доставит их слушателю (слушателям) в порядке, полученном от брокера.

ИЗМЕНИТЬ

Я только что провел тест (2 очереди с 2 существующими сообщениями в каждой), и они были доставлены циклически — q1m1, q2m1, q1m2, q2m2, когда предварительная выборка была 1.

С предварительной выборкой, установленной на 4, я вижу q1m1, q1m2, q2m1, q2m2.

Конечно, когда очереди пусты, сообщения обычно поступают в том порядке, в котором они поступают к брокеру.

ИЗМЕНИТЬ2

См. раздел Предварительная выборка потребителя.

Spring AMQP использует вариант basicQos без глобального аргумента, поэтому используется значение по умолчанию (false). Это означает, что предварительная выборка выполняется для каждого потребителя.

person Gary Russell    schedule 09.05.2016