C++ ZeroMQ microservice

Я разрабатываю программу, у которой есть 4 модуля, которые я запускаю в отдельных потоках с отдельными boost::asio::io_context и общая база данных. Хочу избавиться от зависимости этих модулей друг от друга, именно потому разделяю их на 4 микросервиса.

В данный момент, пришел к такому варианту реализации:

  1. Запускаю один поток для брокера, который напишу с использованием ZeroMQ.
  2. 4 модуля подключу к этому брокеру, научив их общаться друг с другом через него.
  3. Сокеты ZeroMQ у каждого модуля, я запущу так же в отдельном потоке, чтобы те, при получении сообщений, ассинхронно вызывали методы своего модуля, с помощью boost::asio::post. введите сюда описание изображения

У меня несколько вопросов:

  1. Правильный ли это подход для разделения на микросервисы? Я хочу запускать их в одной программе в разных потоках, или раздельно с помощью разных исполняемых файлов, в зависимости от моих потребностей.
  2. Как правильно сделать подключения сокетов в ZeroMQ, чтобы каждый модуль мог общаться с другим модулем, посредством брокера? Получается, они должны, и получать, и отправлять сообщения. Это два сокета PULL-PUB или DEALER-ROUTER?

Ответы (0 шт):