Поведение на няколко опашки на RabbitListener

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

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

В какъв ред се обработват съобщенията от 3-те опашки?


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