使用主题时,使用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处于预览状态。