Обмен заголовками RabbitMQ со списком

У меня возникли некоторые проблемы, пытаясь понять, как работает обмен заголовками типов.

Только один обмен, myExchange

Три очереди:

  1. myQueue1
  2. myQueue2
  3. myQueue3

Наручники:

  1. myExchange => myQueue1 (x-match: any, myHeader: [test1])
  2. myExchange => myQueue2 (x-match: any, myHeader: [test2])
  3. myExchange => myQueue3 (x-match: any, myHeader: [test1, test2, test3])

Я ожидаю, что заголовок сообщения будет иметь несколько значений; любая комбинация test1, test2, test3 (пример: только test1, test1 и test2, test3 и test2 и т. д.)

myQueue3 получает сообщения, только если они имеют myHeaders: [test1, test2, test3]. Я ожидаю, что myQueue3 будет получать сообщения, например, test1 и test2.

myQueue1 получает сообщения, только если у них есть myHeaders: [test1]. Я ожидаю, что myQueue1 будет получать сообщения, например, для test1 и [test1, test2].

Есть ли способ добиться такого поведения? Спасибо

3 ответа

Для этого у меня есть хитрость.

Наручники:

  • myExchange => myQueue1 (x-match: any, test1: true)
  • myExchange => myQueue2 (x-match: any, test2: true)
  • myExchange => myQueue3 (x-match: any, test1: true, test2: true, test3: true)

myQueue1 получит все сообщения с заголовками, содержащими {test1: true}.

myQueue2 получит все сообщения с заголовками, содержащими {test2: true}.

myQueue3 получит все сообщения с заголовками, содержащими одно из следующих значений: {test1: true}, {test2: true} или {test3: true}.

Я предпочитаю это, потому что ключ маршрутизации ограничен 255 байтами, но ограничение количества элементов в заголовке очень велико.

По производительности я не знаю что лучше.

Вы можете объявить несколько привязок для одной и той же очереди.

В вашем случае очередь 3 будет иметь три разных привязки.

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

Другие вопросы по тегам