Здравствуйте, изучаю 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 ответов

25 просмотров

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

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

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

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

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

Всем привет. Понимаю, что, наверное, сто раз поднимали эту тему, но по ключевым словам не смог найти. Как передать в values.yaml зависимого хелм-чарта теги образов, собираемых...
Vitalik Petrov
4
Всем привет. Werf v2.10.5 При удалении релиза вместе с неймспейсом (werf dismiss --namespace namespace_name) Сыпятся ошибки ┌ Waiting for resources elimination: namespaces/rel...
Vitalik Petrov
1
@aigrychev, @ilya_lesikov добрый день! а поддерживает ли werf helm xxxx или werf bundle xxxx работу с сабчартами через http-прокси? (сработает ли использование HTTP_PROXY/HTTP...
Сергей Голод
4
Добрый день! Удалил все файлы с переменными из проекта, получил Error: release deploy: process resources: error validating adoptable resources: adoption validation failed: re...
Evgheni Mad
2
Привет! Вопрос про werf helm Приложение деплоится через werf helm upgrade --atomic Иногда(все условия для воспроизведения до конца непонятны, но есть версия, что это происходи...
𝓐𝓵͢͢͢𝓮𝔁 C
2
Всем привет. Сегодня добавили в приложение дополнительный образ nginx, в который докидывается системная статика прям в образ. При деплое бандлами деплоилось 200+ джоб(клиентов...
Владимир Муковоз
6
Добрый день, после перехода с версии 1.2 на 2.10 werf cleanup начал удалять использующиеся теги, и до и после обновления использовались дефолтные политики keepPolicies Подскаж...
Дмитрий
29
Блин а мне как поумнеть ?
Toxin
191
Друзья, добрый день. Прошу подсказать с базовым вопросом по использованию CI переменных gitlab в werf.yaml. Хочу в beforeInstall использовать env переменную с токеном. Мне нуж...
Anton Zol
10
Вопросик не совсем werf. Но вдруг мы подскажите воркэраунд или ещё что-нибудь. Могу ли я как-нибудь в моменте деплоя внутри heml рендера получить хэшсумму файла шаблона (./tem...
Alex Подрябинкин
11
Карта сайта