RabbitMq: динамическое число потребителей с прямыми привязками - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть следующий сценарий:

  • Служба одного производителя
  • Динамическое количество услуг потребителей
  • Сообщения содержат задачи с определенным продуктом, поэтому один раз потребительx обрабатывает сообщение о продукте y.В будущем x должен обрабатывать все сообщения продукта y.В идеале служба производителя должна отправлять все сообщения о продукте x в очередь, из которой читает только потребитель x.
  • Чтобы равномерно распределить рабочую нагрузку, должен быть способ, которым необходимо управлять новым продуктом, чтобыего получает следующий доступный потребитель (я полагаю, очередь, из которой читают все потребители)

Мой подход:

  • Обмен отправляет новые рабочие места продукта вОчередь "newProduct", из которой потребляются все потребители.
  • Потребитель y, который читает такое сообщение, уведомляет службу производителя (в отдельной очереди), что он теперь отвечает за продукт x.
  • Затем производитель отправляет все сообщения для продукта x в очередь, соответствующую потребителю y.
  • Когда новый потребительский сервис z переходит в онлайн, он уведомляет сервис производителя о конкретной очереди, что он находится в сети.так что производитель может создать привязку в обмен на правильную очередь z.

Вопросы:

  • мой подход - хороший способ решения проблемы, или я пропускаю решения rabbitmq, которые бы решали проблему менее сложным способом?
  • Как добавить новую очередь во времявремя работы до биржи?

1 Ответ

0 голосов
/ 12 февраля 2019

Обмен отправляет новые рабочие места продукта в очередь "newProduct", из которой потребляют все потребители.

Это выглядит хорошо для меня.

Потребитель y, который читает такое сообщение, уведомляет службу производителя (в отдельной очереди), что теперь он отвечает за продукт x.Это также хорошо, я думаю, что если производитель не получил уведомление о том, что продукт X позаботился о нем, он должен будет что-то сделать.Затем производитель отправляет все сообщения для продукта x в очередь, соответствующую потребителю y.

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

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

Вы можете сделать это таким образом, но я бы сделал это по-другому:

Когда потребитель выходит в сеть, он сам создает необходимые очереди (или подписывается на существующие очереди).

Я вижу это так:

  • Потребитель подключается к сети и подписывается на очередь новых продуктов.
  • Когда получено сообщение для обработки продукта Z:
  • Создает для себя новую очередь с ключом привязки product-Z
  • Уведомляет производителя о том, что продукт Z в настоящее время обрабатывается
  • Производитель начинает отправлять сообщения с ключом маршрутизации product-Z, и они заканчиваются вОчередь потребителя.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...