如何在 Google Cloud PubSub 上实现请求-响应模式?
How to implement a request-response pattern on Google Cloud PubSub?
我有多个客户 A(主应用程序)和多个客户 B(支付服务)。
如果我从客户端 A 发布一条消息,将在客户端 B 上处理和回答(在另一个主题中发布答案),如何在客户端 A 上捕获此答案?
问题是客户端A有多个实例,所以我不能保证触发请求的完全相同的实例会收到响应(PubSub会随机选择一个实例)。
看到像 RabbitMQ 这样的其他代理有 "reply-to" 选项。 Google PubSub 上有类似的东西吗?
这样,我可以在客户端 A 上模拟一个 "synchronous" 操作,并且只在 processing/response 完成时才回答用户,而不是每次都在前端处理这个检查。
谢谢!
将发布者与订阅者解耦是 Cloud Pub/Sub 的核心功能之一,它遵循 publish-subscribe pattern。 Cloud Pub/Sub 目前不支持将订阅者的响应直接发送到发布给定消息的实体。
您可以通过包含有关发布给定消息的客户端 A 实例的信息来解决此问题,这样客户端 B 就可以确定在处理完成后通知客户端 A 的哪个实例。例如,客户端 B 可以直接向发布者发送一个 RPC,或者如果客户端 A 的实例足够少,他们每个人都可以有专门的主题,在那里他们作为订阅者接收“处理完成”的消息(在一个主题上,客户端 B 是出版商)。
考虑正确方法时需要注意的潜在问题:
- 云 Pub/Sub 提供至少一次交付。有可能向订阅者发送重复的消息,您的系统需要对此具有弹性。
- 如果客户端 A 或客户端 B 的给定实例在您的流程中的任何一点崩溃,会发生什么情况?它会引入处理 erroneous/duplicate 付款的风险吗?
我有多个客户 A(主应用程序)和多个客户 B(支付服务)。
如果我从客户端 A 发布一条消息,将在客户端 B 上处理和回答(在另一个主题中发布答案),如何在客户端 A 上捕获此答案?
问题是客户端A有多个实例,所以我不能保证触发请求的完全相同的实例会收到响应(PubSub会随机选择一个实例)。
看到像 RabbitMQ 这样的其他代理有 "reply-to" 选项。 Google PubSub 上有类似的东西吗?
这样,我可以在客户端 A 上模拟一个 "synchronous" 操作,并且只在 processing/response 完成时才回答用户,而不是每次都在前端处理这个检查。
谢谢!
将发布者与订阅者解耦是 Cloud Pub/Sub 的核心功能之一,它遵循 publish-subscribe pattern。 Cloud Pub/Sub 目前不支持将订阅者的响应直接发送到发布给定消息的实体。
您可以通过包含有关发布给定消息的客户端 A 实例的信息来解决此问题,这样客户端 B 就可以确定在处理完成后通知客户端 A 的哪个实例。例如,客户端 B 可以直接向发布者发送一个 RPC,或者如果客户端 A 的实例足够少,他们每个人都可以有专门的主题,在那里他们作为订阅者接收“处理完成”的消息(在一个主题上,客户端 B 是出版商)。
考虑正确方法时需要注意的潜在问题:
- 云 Pub/Sub 提供至少一次交付。有可能向订阅者发送重复的消息,您的系统需要对此具有弹性。
- 如果客户端 A 或客户端 B 的给定实例在您的流程中的任何一点崩溃,会发生什么情况?它会引入处理 erroneous/duplicate 付款的风险吗?