使用amqp在Azure Service Bus上进行ETIMEDOUT

时间:2018-02-06 07:30:29

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

我们正在使用amqp10包为nodejs从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

2 个答案:

答案 0 :(得分:0)

尝试使用以下设置更长的超时时间:

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

default value of idleTimeout是120000毫秒。

答案 1 :(得分:0)

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

它还可以很好地处理断开连接和重新连接,甚至能够从致命错误(例如,实体未找到)中恢复。

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

我知道这是一个较晚的答复,但是以防万一有人遇到旧的服务总线节点SDK的问题并降落在此处,请参阅下面的链接。

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