基本上我已经创建了一个云函数(编写了Node.js代码),它将触发cloud pubsub主题的消息,并将该数据加载到Bigquery表。
主题中的消息在通过云功能读取后会被删除。我理解订阅者在内部发送确认和结果,消息从主题中删除。
我想控制发送给发布商的确认。如何实现,没有找到任何相关文件。
答案 0 :(得分:3)
Google Cloud Functions不允许您控制对Cloud Pub / Sub消息的确认。完成该功能后,将确认该订阅的消息。如果您希望对确认进行更细粒度的控制,则需要直接使用Google Cloud Pub / Sub。有Node.js client library。
关于确认的一些澄清说明:确认单个订阅的消息并不意味着该主题的消息被删除,仅用于订阅。其他独立订阅仍将收到该消息,并且必须对其进行确认。这也与发送给发布者的确认无关。发布Google Cloud Pub / Sub消息后,一旦Google Cloud Pub / Sub保存了消息并确保将其发送到订阅,就会确认发布呼叫(即,响应将发送给发布者)。这是异步消息传递系统的主要优点之一:从发布者接收消息(并确认发布)与通过订阅(订阅者单独确认)传递消息无关。
答案 1 :(得分:0)
我发现可靠地控制哪些消息得到确认并且不在云功能中的唯一方法是使用REST Service APIs。
这是因为node.js pubsub client服务在后台确认和管理连接。这是clearly forbidden in a cloud function。
但是,REST API相当容易使用,并且可以对所识别的消息进行精细控制。
答案 2 :(得分:0)
如果我理解正确;您创建了一个发布/订阅主题,并在与此主题相同的项目中放置了一个云功能。使用指定主题的google.pubsub.topic.publish触发器部署云功能。
由于使用队列/主题,生产者和消费者彼此独立地操作。这样可以实现松耦合的体系结构,该体系结构具有自己的advantages and disadvantages。
如果发布者将消息发布到该主题,则它会确认该消息已成功发送到该主题。否则,您的代码将给出异常(拒绝连接,禁止连接等)。对于Node.js和其他语言,有pub / sub客户端sdk,可用于轻松发布消息。
当消息涉及主题时,它将转到订阅者,订阅者可以是推送订阅或请求订阅。在这一点上,认可变得越来越重要。 Google pub / sub和其他队列/主题一样,都设计有保证的交付。这意味着如果无法传递邮件,它将在一段时间(可配置)后重试,直到超过总寿命(默认为7天)
在使用请求订阅并希望让主题知道您已成功接收到消息时,Node.js中将需要以下内容:
message.ack();
使用对API或HTTP云功能的强制订阅时,您需要返回自定义的http代码。发布/订阅期望成功状态代码(例如200或204):
res.status(204);
res.send('OK');