Node.js PubSub REST订阅拉取未返回所有消息
我们使用来自PubSub订阅的消息。已确认准备好进行服务的消息,而未确认其他消息,以便在以后的执行周期中进行服务 在执行周期中,我们使用Node.js PubSub REST订阅拉取未返回所有消息,node.js,google-cloud-pubsub,Node.js,Google Cloud Pubsub,我们使用来自PubSub订阅的消息。已确认准备好进行服务的消息,而未确认其他消息,以便在以后的执行周期中进行服务 在执行周期中,我们使用returninstallent=true和maxMessages=100向发送单个请求 在测试过程中,我们遇到了一种情况,即在每个执行周期中只返回3条“旧”消息。新发布的消息从未包含在请求拉入中。通过在Stackdriver monitoring中监视未送达的消息,我们验证了新消息是否成功到达订阅 拉REST API是否不包括所有未送达的消息? 是否忽略ma
returninstallent=true
和maxMessages=100
向发送单个请求
在测试过程中,我们遇到了一种情况,即在每个执行周期中只返回3条“旧”消息。新发布的消息从未包含在请求拉入
中。通过在Stackdriver monitoring中监视未送达的消息,我们验证了新消息是否成功到达订阅
- 拉
REST API是否不包括所有未送达的消息?
- 是否忽略
参数?maxMessages
- 如何使用REST API读取最大指定值的所有消息?
pull
API发送两个并行请求并合并结果来解决这个问题。我们发现讨论了解决方法(需要并行请求)
更新日期:2018年2月22日
我写了这篇文章,解释了为什么我们不得不使用PubSub服务REST API。一个
pull
调用不一定会返回所有未送达的消息,特别是当return instally
设置为true时。pull
承诺最多返回maxMessages
,但这并不意味着如果有那么多可用消息,它将始终返回maxMessages
pull
API试图在返回更多消息和保持低端到端延迟之间取得平衡。它宁愿快速返回几条消息,也不愿等待很长时间才能返回更多消息。需要从存储器或其他服务器检索消息,因此有时无法立即交付所有这些消息。随后的pull
请求将接收稍后检索的其他消息
如果要最大限度地利用pull
请求接收更多消息,请将returninstally
设置为false。即使maxMessages
大于尚未传递的消息数,这仍然不能保证所有消息都将在单个pull
请求中传递。您仍然应该发送后续的pull
请求(或者更理想的是,同时发送多个pull
请求)来检索所有消息
另一方面,您应该考虑切换到处理引擎盖下的所有这些,并将消息传递给您指定的回调。是否有一个建议的请求发送数量,以确保大部分或所有消息都被检索到?另外,正如我在我的other和my中发布的一样,我发现与云函数不兼容,我的代码正在运行。。。AFAIK,因为它做背景活动,这应该是。在确认之前,我觉得必须直接使用RESTAPI。如果您不断发布消息,那么您将始终需要处于拉取状态,这意味着始终创建后续拉取请求。实际上,没有办法保证在任何时候都能提取所有或大部分消息。在发送足够数量的返回零消息的请求(假设您使用ReturnImmedialey=false)之前,您可能会继续拉取,这样可能会提供相当好的信心,即不再有挂起的消息,但这无法保证。ok似乎是合乎逻辑的。我应该澄清一下,我们的目的不是保证检索到所有消息,只是为了确信即使订阅中已经存在旧的、未确认的消息(我们有意在以后忽略的消息),也会检索到新发布的消息。谢谢你的帮助!我写了一篇更详细的文章,讨论了为什么我们使用PubSub,以及我们在获取消息时面临的问题。