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

23 просмотра

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

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

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

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

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

werf cleanup как-то старается не удалять промежуточные имаджи (ранее известные как артефакты)? Уже несколько раз из cache-repo улетал наш базовый node имадж. Что выглядит лог...
Vyacheslav
2
Здрасьти! Делаю Buildah+Docker-multistage. В первом имадже делаю COPY кода. Из них генерю файлы: 31229b03ef2ed26c5e02d0e8320f8a04 ./package.json a0b92a158d0bed9570350af0ed3e...
Vyacheslav
4
Всем привет. Werf v2.10.5 При удалении релиза вместе с неймспейсом (werf dismiss --namespace namespace_name) Сыпятся ошибки ┌ Waiting for resources elimination: namespaces/rel...
Vitalik Petrov
1
Вопросик не совсем werf. Но вдруг мы подскажите воркэраунд или ещё что-нибудь. Могу ли я как-нибудь в моменте деплоя внутри heml рендера получить хэшсумму файла шаблона (./tem...
Alex Подрябинкин
11
Всем привет. Сегодня добавили в приложение дополнительный образ nginx, в который докидывается системная статика прям в образ. При деплое бандлами деплоилось 200+ джоб(клиентов...
Владимир Муковоз
6
Друзья, добрый день. Прошу подсказать с базовым вопросом по использованию CI переменных gitlab в werf.yaml. Хочу в beforeInstall использовать env переменную с токеном. Мне нуж...
Anton Zol
10
В английской версии документации к докер инструкциям я увидел этот пункт: > Tip: you can also export environment variables right to the user stage instructions. В русской ...
Alex
3
всем привет) подскажите, судя по поиску, пару лет назад возникал вопрос насчет преобразования секретов при шифровании к строковому типу. Что-то за это время менялось? Сейчас ...
Denis Yudin
9
Добрый день, после перехода с версии 1.2 на 2.10 werf cleanup начал удалять использующиеся теги, и до и после обновления использовались дефолтные политики keepPolicies Подскаж...
Дмитрий
29
Вопрос. Имеем большие репозитории и медленные скорости. Из-за чего очень долго длятся пайплайны. Azure DevOps, PR пайплан, выкачиваем только эфимерный(виртуальный) комит, и з...
Alex Подрябинкин
11
Карта сайта