【问题标题】:Dynamically Create Cloud Run or Function determined by attribute in pub/sub动态创建由 pub/sub 中的属性确定的 Cloud Run 或 Function
【发布时间】:2022-12-21 19:58:15
【问题描述】:

我正在尝试让 Cloud Run 或 Cloud Function 启动并提取与其定义的 ID 匹配的消息,例如,如果将属性 ID 为 1 的消息放入主题中,则 ID 为 1 的 Cloud Run 会将其取出,所有具有属性 1 的消息都发送到同一个实例,这一点很重要。

我知道我可以在订阅上使用过滤器,但我希望能够轻松更改可能的 ID 数量,例如如果我只将消息放在 ID 介于 0 和 4 之间的主题中,那么只会启动五个实例。

我将如何着手创建这样的东西? Pub/Sub 是否支持这种功能?

我知道我可以创建 X 数量的主题,然后将每条消息放入其自己的主题中,但是当存在属性系统时,这似乎是一种低效的执行方式。

【问题讨论】:

  • 您不能在 Pub/Sub 中指定根据属性向哪个端点发送消息。您可能需要 CR 和 Pub/Sub 之间的服务作为“路由器”。 it's important that all messages with attribute 1 go to the same instance 您将什么称为 Cloud Run 实例?你说服务?如果您实际上是指在 Cloud Run 中运行的实例,则无法将消息重定向到特定实例
  • 此外,您所描述的听起来并不像您正在基于消息(如您​​在标题中所写)创建函数/CR 服务,而是在已创建的服务中处理它们。你能澄清一下吗?
  • 啊,我可能措辞不当,我希望每个消息属性不超过一个容器。我想你是对的,我希望 Cloud Run 轮询 pub sub 并取出其中可用的任何数据。就像 AWS 的 SQS 是如何工作的。我的主要问题是当有一条消息的属性尚未分配正在运行的容器时,让云运行实例启动......
  • 你找到解决办法了吗?如果是这样,您可以分享解决方案吗?
  • @RoopaM 有点,我找到了另一种适合我的情况的方法。

标签: google-cloud-platform google-cloud-functions mapreduce google-cloud-pubsub google-cloud-run


【解决方案1】:

这是不可能的,我不得不在启动函数之前等待所需函数的所有数据准备就绪,我不能让它不断轮询并获取正确的数据。

因此,最好的方法是将数据放入 firestore,然后当所有数据都准备好供下一层处理时,我会在包含消息 ID 的 pub sub 中放入一条消息,该消息 ID 将决定数据该功能将处理。

然后,该函数将在 firestore 中查询具有包含给定消息 ID 的属性的消息。

我找不到任何其他工作方法可以给我想要的结果。

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 2022-01-09
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2021-09-09
    • 2019-11-03
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多