如何使用Node.js在Cloud PubSub中控制确认



基本上我已经创建了一个云函数(编写了Node.js代码),它将在云pubsub主题的消息上触发,并将数据加载到Bigquery表中。

主题中的消息在通过云功能阅读后会被删除。据我所知,订阅者内部会发送确认消息,结果消息会从主题中删除。

我想控制发送给发布者的确认。怎么能做到,没有找到任何关于这方面的文件。

Google Cloud Functions不允许您控制Cloud Pub/Sub消息的确认。完成该功能后,将确认订阅的消息。如果你想对确认进行更细粒度的控制,那么你需要直接使用谷歌云Pub/Sub。有一个Node.js客户端库。

只是关于确认的一些澄清说明:确认单个订阅的消息并不意味着该主题的消息会被删除,只是针对订阅。其他独立订阅仍将接收消息并必须对其进行确认。这也独立于发送给发布者的确认。当发布Google Cloud Pub/Sub消息时,一旦Google Cloud Pub/Sub保存了消息并保证将其发送给订阅,发布调用就会得到确认(即向发布者发送响应)。这是异步消息传递系统的主要优点之一:从发布者接收消息(并确认发布)独立于通过订阅(由订阅者单独确认)传递消息。

如果我理解正确;您制作了一个pub/sub主题,并在与该主题相同的项目中放置了一个云函数。cloud函数使用指定主题的google.pubsub.topic.publish触发器进行部署。

由于使用队列/主题,生产者和消费者的操作彼此独立。这实现了松散耦合的体系结构,该体系结构有其自身的优点和缺点。

如果发布者向主题发布消息,则会得到消息已成功发送到主题的确认。否则,您的代码将出现异常(拒绝连接、禁止连接等)。对于Node.js和其他语言,有pub/sub客户端sdk,您可以很容易地使用它来发布消息。

当消息在主题上时,它将发送给订阅者,订阅者可以是推送订阅或拉式订阅。在这一点上,承认变得越来越重要。谷歌酒吧/酒吧和其他队列/主题一样,都是有保证交付的。这意味着,如果消息无法传递,它将在一段(可配置的)时间后重试,直到超过总生存期(默认为7天)

当使用请求订阅并想让主题知道你成功收到了消息时,你需要在Node.js:中这样做

message.ack();


当使用对API或HTTP云函数的推送订阅时,您需要返回自定义HTTP代码。Pub/sub期望成功状态代码(例如200或204):

res.status(204); 
res.send('OK');

我发现的可靠控制云函数中哪些消息得到确认和哪些消息不得到确认的唯一方法是使用REST服务API。

这是因为node.js pubsub客户端在后台服务确认和管理连接。这在云功能中是明确禁止的。

然而,REST API非常易于使用,并且可以对哪些消息得到确认进行细粒度控制。

最新更新