【问题标题】:ETIMEDOUT on Azure Service Bus with amqpAzure 服务总线上的 ETIMEDOUT 与 amqp
【发布时间】:2020-12-14 18:16:55
【问题描述】:

我们正在使用 nodejs 的 amqp10 包从 azure 服务总线上的队列接收消息。我们有时会遇到错误

{ Error: read ETIMEDOUT at _errnoException (util.js:1022:11) at TLSWrap.onread (net.js:615:25) code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'read' }

但这会在它停止接收消息后大约 12 分钟抛出。有没有办法配置超时?我们正在使用提供的服务总线策略Policy.ServiceBusQueue

代码可用here

【问题讨论】:

  • 您能出示您的代码吗?

标签: node.js azure amqp azureservicebus azure-servicebus-queues


【解决方案1】:

尝试设置更长的超时时间:

client.connect(uri, { idleTimeout: 120000 }).then(() => {
    // ...
})

default value of idleTimeout 是 120000 毫秒。

【讨论】:

  • 如果我希望它早点重新连接,我不应该尝试减少超时吗?我不确定为什么在首先引发错误之前延迟超过 12 分钟
  • 120,000 毫秒是 120 秒 - 2 分钟。不是 12 分钟。
【解决方案2】:

如果您想永久接收消息,可以利用@azure/service-bus SDK 版本 7 中提供的subscribe 方法(您可以根据需要停止接收)。

它还可以优雅地处理断开连接和重新连接,甚至能够从实体未找到等致命错误中恢复。

您可以参考使用@azure/service-bus SDK 7 的receiveMessagesStreaming.ts 示例代码。

我知道这是一个迟到的回复,但以防万一有人遇到旧的服务总线节点 SDK 的问题并登陆这里,请参阅下面的链接。

@azure/service-bus的最新7.0.0版本已于近期发布。

【讨论】:

    猜你喜欢
    • 2015-02-25
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2021-12-19
    相关资源
    最近更新 更多