Реализация обмена сообщениями Saga с RabbitMQ - PullRequest
0 голосов
/ 17 мая 2019

Я новичок в RabbitMQ и хочу реализовать асинхронный обмен сообщениями SAGA с RabbitMQ. Поэтому для выполнения задачи я использовал RPC-пример RabbitMQ.У меня есть один оркестратор (RPCClient) и несколько микросервисов (RPCServer).Orchestrator использует уникальные очереди для управления микросервисами. И каждая микросервис использует общую очередь (Reply_ Queue) для ответа оркестратору.Для ведения журнала я хочу получать уведомления на стороне оркестратора, когда какой-либо микросервис не работает в течение любого настраиваемого времени.Я читал об отмене потребителя, но она работает только при удалении очереди. Как получить уведомления в JAVA с сохранением сообщений очереди?И это правильный способ реализации саги асинхронного обмена сообщениями?

1 Ответ

0 голосов
/ 18 мая 2019

Трудно реализовать надежный RPC, я не могу дать подробное руководство о том, как это сделать. Если мы проигнорируем ту же особую ситуацию отказа, я могу дать простой обходной путь:

Во-первых, мы предполагаем, что RPCClient никогда не завершится неудачей, RPCServer может произойти сбой в любое время.

RPCClient необходимо знать, какой запрос является тайм-аутом, чтобы он мог отправить request message с TTL . После RPCServer получения request message и отправки response message, он должен ACK request message.

Если RPCServer:

  • не удалось до потребления request message OR
  • перед отправкой произошел сбой response message

request message будет переиздан на Dead Letter Exchange , так что RPCClient может потреблять в какую-то очередь, связанную с этим обменом, он может знать, какой запрос истек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...