当前位置: 首页 > 知识库问答 >
问题:

Google pub/sub如何设置读取超时

郑锦
2023-03-14

我想设置订阅请求的读取超时。现在唯一的选择是设置returnimmediately=true,或者只是等到pubsub返回,如果没有发布消息,这似乎是90秒。

我正在使用gcloud-node模块调用PubSub。它使用底层的请求模块进行gcloud api调用。我已经更新了gcloud-node/lib/pubsub/subscription.js的本地副本,将请求超时设置为30秒

this.request({
  method: 'POST',
  uri: ':pull',
  timeout: 30000,
  json: {
    returnImmediately: !!options.returnImmediately,
    maxMessages: options.maxResults
  }
}

更新:我可能需要澄清一下我的例子。我有两个客户端连接在同一时间和拉从同一订阅。两者之间唯一的区别是第一个配置为30秒后超时。由于两个客户机连接到同一个订阅,所以pubsub将在这两个客户机之间分配消息负载。如果我在两个客户端连接45秒后发布消息,则pubsub有50/50的机会将消息传递给尚未超时的第二个客户端。如果我发送10条消息而不是一条,第二个客户机将接收这10条消息的子集。看起来这是因为我的客户在长时间的投票中。如果客户端断开连接,服务器将不知道,并将尝试根据超时的客户端发出的请求的响应发送已发布的消息。从我的测试中,这是我观察到的行为。我想做的是能够在pull请求中发送一个超时参数,以告诉subpub在30000ms后如果在此期间没有发布消息就发回一个响应。阅读API文档,这似乎不是一个选择。

共有1个答案

万俟鸿波
2023-03-14

设置请求超时是在30秒后超时拉拔的正确方法。已取消请求的存在可能不是导致另一个请求不能立即获得消息的原因。如果您的第二次拉取(未超时)设法拉取先前发布的其他消息,则不一定要等待超时后发布的其他消息传入才能完成。它只保证返回的不超过maxmessages,而不是只在它恰好有maxmessages时才返回(如果有那么多)。发布完成后,一些稍后的pull将获得消息,但不能保证具体何时发生。

 类似资料:
  • 问题内容: 在jersey 1中,我们在类中具有一个函数setConnectTimeout。 在球衣2中,缺少此功能的地方使用该类。 如何在jersey 2.x中设置连接超时并读取超时? 问题答案: 下面的代码在Jersey 2.3.1中对我有用(灵感在这里找到:https :

  • 在泽西1中,我们在类中有一个函数setConnectTimeout。 在jersey 2中,类用于缺少此函数的地方。 如何设置连接超时和读取超时在泽西2. x?

  • 我有一个netty服务器,它接收来自客户端的请求,向另一个服务器发出请求,然后在对原始客户端请求的响应中使用来自第二个请求的响应。我希望对第二台服务器的请求有一个较短的超时(~40ms),以便在超时时发送一般响应,但我不想关闭与第二台服务器的连接。相反,我将在超时请求到达时放弃响应,然后将连接返回到我的池。 在Netty最好的方法是什么?我尝试过ReadTimeoutHandler,但当超时发生时

  • 问题内容: 我正在使用API(,和,和朋友)对远程服务器进行Web服务调用,这在很大程度上取得了很大的成功。 但是,有时会出现问题,并且程序永远卡住。 为了解决这个问题,我想添加一个读取超时。 我发现有几种方法可以实现这一目标,但它们似乎都非常糟糕。 所以我对社区的问题是:使用javax.xml.soap API进行调用时,实现读取超时行为的最佳方法是什么? 问题答案: 您必须创建自己的URLSt

  • 我有一个TcpClient,用于将数据发送到远程计算机上的侦听器。远程计算机有时打开,有时关闭。因此,TCP客户端将经常无法连接。我希望TcpClient在一秒钟后超时,这样当它无法连接到远程计算机时就不会花费太多时间。目前,我对TcpClient使用以下代码: 这对于处理任务来说已经足够好了。如果可以,它会发送它,如果无法连接到远程计算机,它会捕获异常。然而,当它无法连接时,抛出异常需要10到1

  • 问题内容: 在selenium测试中,您可以使用 如何为selenium版本 3.8.0 和python 2.7.12 设置此命令的超时? 问题答案: 为设置 为 可以诱导 。 方法细节 精氨酸 用法 例 控制台输出 文献资料 您可以在 此处找到详细的讨论 深潜 按照Python, 如果我们不处理异常,则会观察到以下日志消息: