2017-10-18 27 views
3

基本上,我创建了一个云功能(编写了Node.js代码),它将触发云pubsub主题的消息并将该数据加载到Bigquery表。我如何使用Node.js控制Cloud PubSub中的确认

主题中的消息在被云功能读取后被删除。我知道订户在内部发送确认和结果,消息从主题中删除。

我想控制发送给发布者的确认。如何实现,没有找到任何文件。

+0

你是手动做这个还是使用Googels客户端库之一?客户端库旨在让他们自己回复,我认为您必须查看是否有办法解决这个问题。 – DaImTo

回答

0

Google Cloud Functions不允许您控制Cloud Pub/Sub消息的确认。完成该功能后,该消息将被确认用于订阅。如果您希望对确认进行更细致的控制,则需要直接使用Google Cloud Pub/Sub。有一个Node.js client library

只是对确认的一些澄清说明:确认单个订阅的消息并不表示该消息仅针对订阅被删除。其他独立订阅仍然会收到该消息并且必须承认它。这也与发送给发布者的确认无关。在发布Google云端发布/订阅消息时,一旦Google云端发布/订阅者保存该消息并确保将其发送到订阅,发布呼叫将得到确认(即向发布商发送响应)。这是异步消息传递系统的主要优点之一:从发布者接收消息(并确认发布)独立于通过订阅(其由订户单独确认)传递消息。

+0

感谢Kamal的解释。关于您的确认注释:如果我订阅了3个话题并且其中一个订阅者没有发送确认(根据您的评论,消息不会从主题中删除),那么其他两个订阅者是否可以再次从该话题读取相同的消息? – Shawn

+0

如果单个订阅尚未确认该消息,则只有该订阅才会再次收到该消息(注意Pub/Sub至少在一次交付时至少一次)。对消息的确认是每个订阅_。 –

+0

@kamal我们发现[node.js pubsub客户端](https://github.com/googleapis/nodejs-pubsub)在云端功能上不能很好地发挥作用,因为它在后台发送确认([禁止云功能] (https://cloud.google.com/functions/docs/bestpractices/tips#do_not_start_background_activities))并尝试重新使用连接。请参阅[我的SO问题](https://stackoverflow.com/q/48623991/880509)。 – codyzu