我想部署一个带有消息排序的 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}
,但看起来名称格式也随着时间的推移而改变,例如较旧的部署函数在订阅中没有区域名称。有没有稳定的方法来做到这一点?
答案 0 :(得分:3)
您必须手动创建消息排序发布/订阅和云函数。
首先,创建一个 pub/sub 主题,然后创建一个订阅,使用 --enable-message-ordering
订阅 pub/sub 主题
第二,创建一个云函数来提供有序的发布/订阅消息。
最后,回到发布/订阅订阅,编辑交付类型以推送和指定您的云功能端点。
所以最终图如下所示。
发布者 -> 发布/订阅主题 -> 发布/订阅订阅者 -> 云功能
您尝试将 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。