C++ ZeroMQ microservice
Я разрабатываю программу, у которой есть 4 модуля, которые я запускаю в отдельных потоках с отдельными boost::asio::io_context и общая база данных. Хочу избавиться от зависимости этих модулей друг от друга, именно потому разделяю их на 4 микросервиса.
В данный момент, пришел к такому варианту реализации:
- Запускаю один поток для брокера, который напишу с использованием ZeroMQ.
- 4 модуля подключу к этому брокеру, научив их общаться друг с другом через него.
- Сокеты ZeroMQ у каждого модуля, я запущу так же в отдельном потоке, чтобы те, при получении сообщений, ассинхронно вызывали методы своего модуля, с помощью boost::asio::post.
У меня несколько вопросов:
- Правильный ли это подход для разделения на микросервисы? Я хочу запускать их в одной программе в разных потоках, или раздельно с помощью разных исполняемых файлов, в зависимости от моих потребностей.
- Как правильно сделать подключения сокетов в ZeroMQ, чтобы каждый модуль мог общаться с другим модулем, посредством брокера? Получается, они должны, и получать, и отправлять сообщения. Это два сокета PULL-PUB или DEALER-ROUTER?