Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js PubSub REST订阅拉取未返回所有消息_Node.js_Google Cloud Pubsub - Fatal编程技术网

Node.js PubSub REST订阅拉取未返回所有消息

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

我们使用来自PubSub订阅的消息。已确认准备好进行服务的消息,而未确认其他消息,以便在以后的执行周期中进行服务

在执行周期中,我们使用
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,以及我们在获取消息时面临的问题。