Здравствуйте, изучаю Rabbit на предмет того, насколько он подходит для

моих задач. Точнее на сколько он будет лучше текущей реализации на Redis Pub/Sub.

Задача в том, чтобы сделать совокупность узлов (сервисов), обменивающихся между собой данными (json). Требования к узлу:
1. Каждый узел имеет свой тип. В системе может быть несколько узлов одного типа.
2. Каждый тип узла имеет набор действий, которые можно инициировать адресованным сообщением "тип_узла.действие", прикрепив к такому сообщению данные в json.
3. Сообщения бывают двух видов:
3.1 Первый вид: отправленное одним узлом сообщение адресуется не конкретному узлу, а совокупности узлов по типу. То есть когда мы отправили сообщение, оно распределяется по round robin в рамках узлов одного типа и соответственно действие выполняется только на одном из узлов.
3.2 Второй вид: широковещательное сообщение, которое будет отправлено всем узлам всех видов.

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

Подводя итог, мне требуется следующее:
1. Отправлять сообщение, распределяющееся по группе узлов (round robin).
2. Отправлять сообщение конкретному узлу (ответ на сообщение).
3. Отправлять широковещательное сообщение группе однотипных узлов.
4. Получать все входящие сообщения.

Бегло изучив теорию, пока у меня в голове складывается такая конструкция: каждому узлу надо присвоить тип (для отправки распределенных сообщений) и уникальное имя (для персональных сообщений-ответов конкретному узлу). Соответственно в рамках Rabbit я должен создать две очереди тип_узла и уникальное_имя_узла. Ну и для широковещательных сообщений я должен буду сделать fanout exchange с биндом на очередь тип_узла.

Дифференциацию сообщений по конкретным действиям в рамках одного типа узла я бы полностью вынес в код обработки очередей и не завязывал бы на конкретный брокер (будь то Rabbit, Redis или что-то другое).

А теперь к вопросам. Правильно ли я все понимаю? Не будет ли избыточным заводить две очереди на один узел? Может быть есть более элегантные способы сделать желаемое?

3 ответов

14 просмотров

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

Анатолий Костюшин
кроль умеет round robin?

можно приколхозить, можно просто подписать на одну очередь все консьюмеры - сами разберутся

Похожие вопросы

Обсуждают сегодня

Привет, запускаю werf в dind в k8s, получаю ошибку на этапе build/beforeSetup: /.werf/stapel/embedded/bin/bash: /.werf/scripts/5898bdfe5214357d3706b879cc8d3d78460fb379607cbd...
florius0
7
Добрый день, чат. Мне в очередь из других RabbitMQ по shovel валятся метрики в формате текста для Prometheus. Помогите пожалуйста подружить RabbitMQ и Prometheus, чтобы он (...
Aleksey
4
Если у очереди установлено x-message-ttl, при получении сообщения из этой очереди, можно узнать остаток времени жизни сообщения?
Сергей
8
падает джоба хотя уже была собрана на соседнем namespace, куда капать? │ │ Copying blob sha256:2fa066caddb8f09a71082b03aa43046f79346a01d9c89e06a1f508bb1207dba5 427 │ │ Copyin...
Andrei St
6
Здравствуйте. Задача состоит в том, чтобы сделать real-time чат в мобильном приложении. После передачи сообщения пользователем через веб-сокеты, для основного и долговременног...
🐾
5
Все доброго дня! Вопрос про export-values: export-values: - parent: testdep.namespace child: Release.Namespace Такое не работает, в Release.Namespace зависи...
Alexander Kozharsky
2
Всем привет 👋 Подскажите пожалуйста, а чего тут не хватает permission или образ битый? Running with gitlab-runner 17.0.0 (44feccdf) on gitlab-runner-c58775949-d7znz YxYz2zp...
Max
2
Подскажите пожалуйста, а я могу вот такую штуку использовать? rpc, только реализованное в реббите https://www.rabbitmq.com/tutorials/tutorial-six-php ( или https://habr.com/ru...
Artyom
11
Привет, делаю self-hosted github actions runner'ы на k8s для автоскейлинга, они распостраняются в виде helm chart'а. Так же мне нужно будет собрать свой образ, залить его в CR...
florius0
6
Клаудвотч и норм, нет?
Владислав Килин
2
Карта сайта