2

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

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

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

看到像 RabbitMQ 这样的其他代理有“回复”选项。Google PubSub 上有类似的东西吗?

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

谢谢!

4

1 回答 1

3

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

您可以通过包含有关发布给定消息的客户端 A 的实例的信息来解决此问题,因此客户端 B 可以确定处理完成后要通知的客户端 A 的哪个实例。例如,客户端 B 可以直接向发布者发送 RPC,或者如果客户端 A 的实例足够少,它们每个都可以有专门的主题,在那里他们作为订阅者接收“处理完成”消息(关于客户端 B 是出版商)。

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

  • Cloud Pub/Sub 提供至少一次交付。有可能向订阅者发送重复的消息,您的系统需要对此具有弹性。
  • 如果客户端 A 或客户端 B 的给定实例在您的流程中的任何时候崩溃,会发生什么?它会带来处理错误/重复付款的风险吗?
于 2020-04-28T19:55:00.437 回答