Google Cloud pubsub node.js客户端与Google Cloud功能不兼容

科迪祖

建筑:

我们有一个使用2个pubsub主题/订阅对的架构:

  • T1定期由cronjob触发主题(例如,每5分钟触发一次)。订阅S1是我们云功能的触发因素。
  • 主题T2充当我们的一项服务发布的后台作业的队列。S2每次执行时,云功能都会读取订阅,以为排队的后台作业提供服务。

这使我们能够独立于后台作业何时添加到队列中来控制后台作业的服务频率。

云功能(由触发S1S2通过pull读取消息它决定准备好哪些后台作业,并在成功服务该作业后,对相关消息进行ACK。尚未准备就绪或失败的作业将不被确认以便稍后进行维修。

问题:

使用Google的官方node.js pubusb客户端时我们遇到了问题

  1. 有时,ACK消息重新出现(似乎无限)。我们已确认邮件在ACK截止日期之前已被确认,并ack()通过调查日志来确保我们正在致电
  2. 有时在第一次执行之后(重新部署该函数之后),后续执行再也不会收到新消息。我们可以S2通过验证stackdriver中未确认的消息计数,或者通过重新部署该功能并查看消息得到服务,来验证消息是否在订阅中排队

我们认为这是Google的node.js pubsub客户端出现的问题。云函数文档明确指出不开始后台活动但是,查看node.js pubsub客户端源,显然可以使用超时在后台为确认服务。

Google的node.js pubsub客户端与Google云功能不兼容吗?Google建议仅在客户端库不存在或不满足其他需求时访问服务API是否在云功能中运行客户端“其他需求”,要求我们使用服务API编写自己的客户端?

尝试解决方法:

作为“解决方法”,我们尝试延迟了cloudfunction的执行时间,以允许node.js pubsub客户端中的任何“后台”进程完成,但这并不能始终消除我们的问题。似乎pubsub客户端对云功能不友好,并且无法从在执行云功能之间停止而恢复。

更新2018年2月22日

在博客上了一篇文章,详细描述了为什么我们以这种方式使用PubSub,以及如何解决node.js pubsub客户端与云功能不兼容的事实。

科迪祖

来自node.js pubsub客户端的开发人员确认,不支持使用客户端从Cloud Function中提取消息。

替代方法是使用服务API但是,当尝试从订阅中提取所有消息,REST API有其自身的警告

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用来自Node.JS客户端的容器映像启动Google Cloud实例?

Google Cloud Pubsub数据丢失

如何使用node.js客户端库以编程方式从google-cloud-automl获取模型ID

Google Cloud Storage客户端

gRPC / proto Google Cloud客户端库与GAPIC Google Cloud客户端库

Google Cloud Dataflow - 从 PubSub 到 Parquet

Google Cloud PubSub 访问查询参数

确保在Google Cloud Run Node App中发送了PubSub批处理请求

google.cloud.pubsub_v1和google.cloud.pubsub有什么区别?

使用DoFn使用Cloud Dataflow从PubSub写入Google Cloud Storage

与Cloud Dataflow搭配使用时说明Google Cloud PubSub的费用

Google Cloud Endpoints非WebApp iOS客户端Blobstore

Google Cloud 存储:授予 OAuth 2.0 客户端权限

Google Cloud Storage节点客户端ResumableUploadError

Google Cloud Functions与客户端的实时通信

Google Cloud Vision是否保存客户端的输入数据?

用于 Stackdriver Trace 的 Google Cloud Java 客户端

获取从PubSub事件触发的Google Cloud Functions的执行ID

setup.py 无法安装 google-cloud-pubsub

如何缩放activejob-google_cloud_pubsub worker?

耗尽或清除Google Cloud pubsub主题的最佳做法

Google Cloud PubSub:如何仅读取最新记录

通过Google Cloud Dataflow将PubSub消息插入BigQuery

使用GCloud Emulator的Google Cloud PubSub V1

Google Cloud Functions和PubSub-空闲后延迟

无法在C#,DLL问题中运行Google Cloud PubSub

使用推送订阅测试Google Cloud PubSub模拟器

无法在Python中正确调用Google Cloud PubSub

google.cloud.pubsub_v1.PublisherClient线程安全吗?