最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

使用主题时,使用servicebus连接时出现ETIMEOUT错误

IT培训 admin 15浏览 0评论

使用主题时,使用servicebus连接时出现ETIMEOUT错误

我正在创建5个连接到servicebus并将它们放在一个数组中。然后随着新消息的继续,我从阵列获得一个连接并使用它们发送消息。当我启动服务并运行负载测试时,它工作正常。我将服务保留了一段时间并再次运行相同的负载测试,它开始出现此错误。 connect ETIMEDOUT xxx.xxx.xxx.xxx\\n at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1191:14)

我不确定它是否是缓存连接并重用它们的好方法,这会导致此问题,或者是导致此问题的其他因素。

let serviceBusConnectionArray = [];
let executed = false;
let serviceBusService;
let count = 0;
let MAX_CONNECTIONS = 5;

class ServiceBus {

  static createConnections(){
    if(!executed){
      for(let i=0; i< MAX_CONNECTIONS; i++){
        serviceBusConnectionArray.push(azure.createServiceBusService(SERVICEBUS_CONNECTION_STRING).withFilter(new azure.ExponentialRetryPolicyFilter()));
      }
      executed = true;
    }
  }
  static getConnectionString(){
    ServiceBus.createConnections();
    if(count < MAX_CONNECTIONS){
      return serviceBusConnectionArray[count++];
    }else{
      count = 0;
      return serviceBusConnectionArray[count];
    }
  }

  static putMessageToServiceBus(topicName, message) {
    return new Promise((resolve, reject) => {
      serviceBusService = ServiceBus.getConnectionString();
      serviceBusService.sendTopicMessage(topicName, message, function (error) {
        if (error) {
          log.error('Error in putting message to service bus, message: %s', error.stack);
          reject(error);
        }
        resolve('Message added');
      });
    });
  }

}

我不确定现在应该选择哪条路线来解决此超时错误。

回答如下:

查看azure-sdk-for-node的源代码,特别是这些行的顺序

  • servicebusservice.js#L455
  • servicebusservice.js#L496
  • serviceclient.js#L190

SDK只是通过其REST API对Service Bus执行REST请求。所以,我真的不认为汇集这些对象真的有帮助。

在SDK使用的request npm模块引发的时间点,超时似乎是真正的超时。

您可以尝试使用引擎盖下的amqp来连接服务总线的newer SDK。请注意,此SDK处于预览状态。

使用主题时,使用servicebus连接时出现ETIMEOUT错误

我正在创建5个连接到servicebus并将它们放在一个数组中。然后随着新消息的继续,我从阵列获得一个连接并使用它们发送消息。当我启动服务并运行负载测试时,它工作正常。我将服务保留了一段时间并再次运行相同的负载测试,它开始出现此错误。 connect ETIMEDOUT xxx.xxx.xxx.xxx\\n at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1191:14)

我不确定它是否是缓存连接并重用它们的好方法,这会导致此问题,或者是导致此问题的其他因素。

let serviceBusConnectionArray = [];
let executed = false;
let serviceBusService;
let count = 0;
let MAX_CONNECTIONS = 5;

class ServiceBus {

  static createConnections(){
    if(!executed){
      for(let i=0; i< MAX_CONNECTIONS; i++){
        serviceBusConnectionArray.push(azure.createServiceBusService(SERVICEBUS_CONNECTION_STRING).withFilter(new azure.ExponentialRetryPolicyFilter()));
      }
      executed = true;
    }
  }
  static getConnectionString(){
    ServiceBus.createConnections();
    if(count < MAX_CONNECTIONS){
      return serviceBusConnectionArray[count++];
    }else{
      count = 0;
      return serviceBusConnectionArray[count];
    }
  }

  static putMessageToServiceBus(topicName, message) {
    return new Promise((resolve, reject) => {
      serviceBusService = ServiceBus.getConnectionString();
      serviceBusService.sendTopicMessage(topicName, message, function (error) {
        if (error) {
          log.error('Error in putting message to service bus, message: %s', error.stack);
          reject(error);
        }
        resolve('Message added');
      });
    });
  }

}

我不确定现在应该选择哪条路线来解决此超时错误。

回答如下:

查看azure-sdk-for-node的源代码,特别是这些行的顺序

  • servicebusservice.js#L455
  • servicebusservice.js#L496
  • serviceclient.js#L190

SDK只是通过其REST API对Service Bus执行REST请求。所以,我真的不认为汇集这些对象真的有帮助。

在SDK使用的request npm模块引发的时间点,超时似乎是真正的超时。

您可以尝试使用引擎盖下的amqp来连接服务总线的newer SDK。请注意,此SDK处于预览状态。

发布评论

评论列表 (0)

  1. 暂无评论