Существует ли шаблон для синхронизации сообщений в очереди сообщений с запросом / ответом вручную? - PullRequest
0 голосов
/ 21 марта 2019

Давайте представим, что у меня есть REST API с конечной точкой /api/status. При доступе к этой конечной точке API отправляет сообщение в очередь сообщений с запросом о состоянии какой-либо другой службы.

Затем в ответ служба отправляет сообщение со своим статусом в очередь, которую прослушивает REST API. Так что это одно сообщение для запроса статуса и одно ответное сообщение.

Мой вопрос: Существует ли шаблон проектирования для преобразования асинхронного характера этого подхода в синхронный в API? Другими словами: существует ли шаблон, в котором метод GetStatus(...) используется в Приведенный ниже псевдокод может быть реализован для синхронизации получения статуса со связью по нескольким очередям сообщений или даже по системам pub / sub.

var statusRequestMsg = "get_status";
var statusResponseMsg = GetStatus(statusRequestMsg);

Я знаю, как решить эту проблему в коде, но мне было любопытно, есть ли шаблон проектирования, который вводит общий подход.

Я много гуглял в поисках этого, но единственная мысль, которую я нашел, была очень техническим объяснением подхода к этому в этой статье: Модель связи для интеграции парадигм «запрос-ответ» и «публикация-подписка» в повсеместно распространенных системах

Обратите внимание, , что я понимаю, что это не идеальный дизайн API, и что есть лучшие способы реализации примера. Я создал приведенный выше пример, чтобы помочь мне проиллюстрировать мой вопрос. Также я понимаю, что некоторые AMQP вкл. (например, RabbitMQ) обеспечивает способ синхронизации связи MQ со стилем запроса / ответа.

Заранее спасибо.

1 Ответ

0 голосов
/ 22 марта 2019

Рассматривали ли вы что-то вроде этого:

  1. Запрос приходит
  2. Создать идентификатор корреляции
  3. Отправить идентификатор корреляции другой службе как часть сообщения, отправленного через очередь
  4. Начать опрос этого идентификатора в каком-нибудь хранилище данных (скажем, Redis)

Время истекло ...

  1. Отправка идентификатора корреляции обратно в исходную службу вместе с результатом запроса в сообщении, отправленном через очередь
  2. Очередь чтения рабочего задает значение идентификатора корреляции в хранилище данных для результата асинхронного запроса
  3. Опрос обнаруживает результат и возвращает в качестве ответа на запрос

Будет ли это работать?

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