如何使用消息排序部署发布订阅触发的云功能?

时间:2021-01-12 21:28:00

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

我想部署一个带有消息排序的 Pubsub 触发的云函数: https://cloud.google.com/pubsub/docs/ordering

gcloud functions deploy 没有设置 --enable-message-ordering 选项的选项: https://cloud.google.com/sdk/gcloud/reference/functions/deploy

我应该在部署函数之前预先创建订阅吗?如果是,Cloud Functions 是否有一个众所周知的格式来匹配订阅名称?似乎格式可能是:gcf-{function-name}-{region}-{topic-name},但看起来名称格式也随着时间的推移而改变,例如较旧的部署函数在订阅中没有区域名称。有没有稳定的方法来做到这一点?

2 个答案:

答案 0 :(得分:3)

您必须手动创建消息排序发布/订阅和云函数。

首先,创建一个 pub/sub 主题,然后创建一个订阅,使用 --enable-message-ordering 订阅 pub/sub 主题

第二,创建一个云函数来提供有序的发布/订阅消息。

最后,回到发布/订阅订阅,编辑交付类型以推送和指定您的云功能端点。

enter image description here

所以最终图如下所示。

发布者 -> 发布/订阅主题 -> 发布/订阅订阅者 -> 云功能

您尝试将 Pub/sub 主题直接与 Cloud 功能建立连接。

但是对于消息排序,Pub/sub 需要主题 -> 订阅者连接。

所以只有 pub/sub 主题 -> pub/sub 订阅者 -> 云函数连接可以将有序消息传递给你的函数。

答案 1 :(得分:0)

在声明具有类似 Cloud Functions 功能的 Pub/Sub 主题时:

exports.pubsub = functions.pubsub.topic('some-topic').onPublish((message, context) => {}

问题是消息排序仅适用于订阅,不适用于主题。
在部署时会自动创建推送订阅:cloudpubsub/subscription/list(以 {{ 开头的订阅) 1}})。这似乎只在手动订阅主题时有效:Enabling message ordering。我还没有尝试过它是否会选择同名的订阅;如果一切都失败了,仍然可以记录消息,然后按时间戳或“序列令牌”排序:https://www.youtube.com/watch?v=nQ9_Xur2aM4