Ошибка ETIMEOUT при подключении к сервисной шине при использовании тем - PullRequest
0 голосов
/ 08 февраля 2019

Я создаю 5 соединений с сервисной шиной и помещаю их в массив.Затем, когда новые сообщения продолжают поступать, я получаю одно соединение из массива и использую их для отправки сообщения.Когда я запускаю сервис и запускаю нагрузочный тест, он работает нормально.Некоторое время я оставляю сервис идеальным и снова запускаю тот же нагрузочный тест, он начинает иметь эту ошибку.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');
      });
    });
  }

}

Я не уверен, какой маршрут мне выбрать сейчас, чтобы устранить ошибки тайм-аута.

1 Ответ

0 голосов
/ 19 февраля 2019

Просмотр исходного кода для azure-sdk-for-node , в частности, эти строки в порядке

SDK просто выполняет запросы REST к службеШина через REST API .Поэтому я не думаю, что объединение этих объектов действительно помогает.

Тайм-аут, похоже, является подлинным тайм-аутом на тот момент, который был увеличен модулем request npm, используемым SDK.

Возможно, вы могли бы попробовать более новый SDK , который использует amqp под капотом для подключения к служебной шине.Обратите внимание, что этот SDK находится в предварительном просмотре.

...