如何在 Google Cloud PubSub 上实现请求-响应模式?



我有多个客户端A(主应用程序)和多个客户端B(支付服务)。

如果我从客户端 A 发布一条消息,该消息将在客户端 B 上处理和应答(在另一个主题中发布答案),如何在客户端 A 上捕获此答案?

问题是客户端 A 有多个实例,所以我不能保证触发请求的完全相同的实例会收到响应(PubSub 将随机选择一个实例)。

看到其他经纪人如RabbitMQ有"回复"选项。Google PubSub上有什么类似的东西吗?

这样,我可以在客户端 A 上模拟"同步"操作,并且仅在处理/响应完成时回答用户,而不是每次都在前端处理此检查。

谢谢!

将发布者与订阅者分离是 Cloud Pub/Sub 的核心功能之一,它遵循发布-订阅模式。Cloud Pub/Sub 目前不支持将订阅者的响应直接发送到发布给定消息的实体。

您可以通过包含有关发布给定消息的客户端 A 实例的信息来解决此问题,以便客户端 B 可以确定在处理完成后要通知的客户端 A 实例。例如,客户端 B 可以将 RPC 直接发送到发布者,或者如果客户端 A 的实例足够少,则每个客户端 A 都可以有专用主题,在这些主题中,它们以订阅者的身份接收"处理完整"消息(在客户端 B 是发布者的主题上)。

在考虑正确方法时需要注意的潜在问题:

  • Cloud Pub/Sub 提供至少一次交付。可能会向订阅者发送重复的消息,您的系统需要对此具有弹性。
  • 如果客户端 A 或客户端 B 的给定实例在流程中的任何时间点崩溃,会发生什么情况?会不会带来处理错误/重复付款的风险?

最新更新