2016-09-11 7 views
0

Я использую API-интерфейс RabbitMQ java API, у меня есть работники, которые зарегистрированы для ключа маршрутизации *.apple. Я хочу убедиться, что не более одного рабочего будет работать над эксплицированным ключом маршрутизации.RabbitMQ: Ограничить работников конкретным ключом маршрутизации

Например, если в очереди 3 задания:

  • orange.apple
  • green.apple
  • orange.apple

Двое рабочих начнется сразу же на orange.apple и green.apple , и только после подтверждения на orange.apple начнется новый рабочий стол orange.apple.

ответ

0

вы не можете ограничить что-либо на основе ключей маршрутизации, кроме очереди, до которой доставляется сообщение.

в вашей ситуации, вы хотите ограничить рабочий по очереди, и вы можете достичь этого, установив, что потребитель будет «эксклюзивным», когда он подключается к/потребляет из очереди.

вы, вероятно, захотите использовать презерватив предварительной выборки потребителя 1, а также «auto ack» из false.

Таким образом, у вас будет один потребитель в очереди, он будет обрабатывать только одно сообщение за раз, и вам нужно будет отправить сообщение, когда вы закончите работу над ним, прежде чем вы получите следующее сообщение ,

+0

Так как я могу ограничить рабочий по очереди и сделать оранжевым и зеленым одновременно? –

+0

одна очередь на тип сообщения. у вас есть очередь orange.apple и очередь green.apple. у каждого есть свой потребитель с конфигурацией, выше –

+0

Проблема в том, что мне нужна дикая карточка «* .apple», и только когда ее точно такой же ключ маршрутизации, я хочу ограничить очередь. –