我们有一个使用2个pubsub主题/订阅对的架构:
T1
定期由cronjob触发主题(例如,每5分钟触发一次)。订阅S1
是我们云功能的触发因素。T2
充当我们的一项服务发布的后台作业的队列。S2
每次执行时,云功能都会读取订阅,以为排队的后台作业提供服务。这使我们能够独立于后台作业何时添加到队列中来控制后台作业的服务频率。
云功能(由触发S1
)S2
通过pull读取消息。它决定准备好哪些后台作业,并在成功服务该作业后,对相关消息进行ACK。尚未准备就绪或失败的作业将不被确认以便稍后进行维修。
使用Google的官方node.js pubusb客户端时,我们遇到了问题:
ack()
通过调查日志来确保我们正在致电。S2
通过验证stackdriver中未确认的消息计数,或者通过重新部署该功能并查看消息得到服务,来验证消息是否在订阅中排队。我们认为这是Google的node.js pubsub客户端出现的问题。云函数文档明确指出不开始后台活动。但是,查看node.js pubsub客户端源,显然可以使用超时在后台为确认服务。
Google的node.js pubsub客户端与Google云功能不兼容吗?Google建议仅在客户端库不存在或不满足其他需求时访问服务API。是否在云功能中运行客户端“其他需求”,要求我们使用服务API编写自己的客户端?
作为“解决方法”,我们尝试延迟了cloudfunction的执行时间,以允许node.js pubsub客户端中的任何“后台”进程完成,但这并不能始终消除我们的问题。似乎pubsub客户端对云功能不友好,并且无法从在执行云功能之间停止而恢复。
我在博客上写了一篇文章,详细描述了为什么我们以这种方式使用PubSub,以及如何解决node.js pubsub客户端与云功能不兼容的事实。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句