【问题标题】:Distribute 1 Pub/Sub Topic Messages across multiple Cloud Functions without repetition跨多个 Cloud Functions 分发 1 个 Pub/Sub 主题消息而不重复
【发布时间】:2023-01-12 22:33:23
【问题描述】:
我有 8 个由 Pub/Sub 主题触发的云函数。
示例问题:
当 16 条消息发布到 Pub/Sub 主题时,将触发所有 8 个函数,并且 8 个函数中的每一个都接收到所有 16 条消息。
期望的结果:
当 16 条消息发布到 Pub/Sub 主题时,将触发所有 8 个函数,这 8 个函数中的每一个都应该接收只有 2消息。
有办法解决这个问题吗?
我试过:设置 1 个 pub/sub 主题,1 个 pub/sub 订阅,从 1 个订阅触发 8 个函数,但在 yaml 文档和云控制台中,我似乎只能从主题触发函数,而不是现有订阅.
可能但不是理想的解决方案:
在 8 个不同的发布/订阅主题中对(示例)16 条消息进行负载平衡,然后每个函数由 1/8 个主题触发(每个主题 2 条消息)。
【问题讨论】:
标签:
google-cloud-platform
google-cloud-functions
google-cloud-pubsub
【解决方案1】:
拥有 8 个独立的 Cloud Functions 是一种反模式,您希望在这些 Cloud Functions 上负载平衡消息。如果每个代码都相同,那么您实际上应该只有一个 Cloud Function,并让它的自动缩放行为负责根据需要打开实例来处理传入的消息。
如果 8 个函数有不同的代码,那么您希望每个函数只处理消息的一个子集是违反直觉的,除非您希望它们根据消息本身的某些属性路由到函数,在这种情况下您想要设置 8 个使用 filters 的订阅。
如果您寻求的行为确实是您所需要的,那么您可能需要在两者之间放置一个单独的 Cloud Functions,它接收所有消息并将其分发到其他 Cloud Functions,而不是使用 Pub/Sub 作为触发器,而是使用 HTTP 请求。然后,您可以从接收 Pub/Sub 消息的单个函数发出 HTTP 请求,并根据需要将它们分发给其他 8 个函数。