Как реализовать шаблон запрос-ответ в Google Cloud PubSub? - PullRequest
1 голос
/ 28 апреля 2020

У меня есть несколько клиентов A (основное приложение) и несколько клиентов B (служба платежей).

Если я опубликую sh сообщение от клиента A, которое будет обработано и получено ответ на клиенте B (публикация ответ в другом топи c), как перехватить этот ответ на клиенте А?

Проблема в том, что клиент А имеет несколько экземпляров, поэтому я не могу гарантировать, что один и тот же экземпляр, который вызвал запрос, будет получить ответ (PubSub будет случайным образом выбирать один экземпляр).

Видел, что другие брокеры, такие как RabbitMQ, имеют опцию «ответить». Есть ли что-то похожее в Google PubSub?

Таким образом, я мог бы смоделировать «синхронную» операцию на клиенте A и отвечать пользователю только после завершения обработки / ответа, вместо того, чтобы иметь дело с этой проверкой на фронте. конец каждый раз.

Спасибо!

1 Ответ

2 голосов
/ 28 апреля 2020

Отключение издателей от подписчиков является одной из основных функций Cloud Pub / Sub, которая следует шаблону publi sh -подписки . В настоящее время в Cloud Pub / Sub нет поддержки отправки ответов от подписчиков непосредственно объекту, опубликовавшему данное сообщение.

Вы можете обойти эту проблему, включив информацию об экземпляре клиента A, опубликовавшего данное сообщение, поэтому клиент B может выяснить, какой экземпляр клиента A следует уведомить после завершения обработки. Например, клиент B может отправить RP C непосредственно издателю, или, если имеется достаточно мало экземпляров клиента A, у каждого из них могут быть выделенные темы, где они получают сообщения «обработка завершена» в качестве подписчиков (в топи c этот клиент B является издателем).

Потенциальные проблемы, на которые следует обратить внимание, пока вы думаете о правильном подходе:

  • Cloud Pub / Sub предлагает доставку хотя бы один раз , Существует вероятность отправки дубликатов сообщений подписчикам, и ваша система должна быть устойчивой к этому.
  • Что произойдет, если данный экземпляр клиента A или клиента B аварийно завершится в любой точке вашего процесса? Представит ли это риск обработки ошибочных / дублирующих платежей?
...