2016-01-06 48 views
0

我正在使用最新的可用npm包 - 0.10.6(https://www.npmjs.com/package/azure)试验Azure Node.js SDK和服务总线主题。 我要发布一个新的消息,并使用下面的代码获得它:Azure服务总线主题 - 使用Node.js SDK接收消息时的延迟

var azure = require('azure'); 

var connectionString = "Endpoint=sb://sfbustest.servicebus.windows.net/;SharedAccessKeyName={key-name};SharedAccessKey={access-key}"; 
var topicName = "{topic-name}"; 
var subscriptionName = "{subscription-name}"; 

var serviceBusService = azure.createServiceBusService(connectionString); 

serviceBusService.getSubscription(topicName, subscriptionName, function(error, subscription){ 
     //if(error) return callback(error); 
     if(!subscription){ 
      serviceBusService.createSubscription(topicName, subscriptionName, function (error) { 
       if (error) throw error; 

       postMessage_retreiveMessage(null); 
      }); 
     } else { 
      postMessage_retreiveMessage(null); 
     } 

    }); 

//postMessage_retreiveMessage(); 
function postMessage_retreiveMessage(){ 
    var topicMsg = { 
     body: new Date().toISOString() 
    }; 

    serviceBusService.sendTopicMessage(topicName, topicMsg, function (error) { 
     if(error) throw error; 

     console.log("message sent: "); 
     console.log(topicMsg); 

     var receiveOptions = { /* isPeekLock: true, */ timeoutIntervalInS: 30 }; 

     serviceBusService.receiveSubscriptionMessage(topicName, subscriptionName, receiveOptions, function(error, receivedMessage){ 
      if(error) throw error; 

      console.log("message received: "); 
      console.log(receivedMessage); 
     }); 
    }); 
} 

的问题: 当创建主题和分区是使 - 这是默认的,如果是通过管理创造了一个话题门户 - 在那种情况下,我最终收到消息之前经历了巨大的延迟。

虽然这种行为不能与.NET SDK重现。

此外,如果分区关闭那么我不会再经历任何重大延迟,并且行为也不再可重现。

展望Azure的SDK进行的Node.js我注意到下面的终点进行呼叫(被调用时receiveSubscriptionMessage):

https://sfbustest.servicebus.windows.net:443/{topic-name}/Subscriptions/{subscription-name}/Messages/Head?timeout=30&api-version=2013-10. 

它的文档可以在这里找到:https://msdn.microsoft.com/en-us/library/azure/hh780770.aspx。 在文档的介绍部分中,声明HTTP API支持分区实体:https://msdn.microsoft.com/en-us/library/azure/dn798895.aspx

如果我手动调用该端点,例如Fiddler,我也会观察所描述的延迟。

如果有人能帮助我理解是什么导致了这种行为,我将非常感激。 预先感谢您。

回答

0

尝试Use sessions with partitioned entities。 在我的测试中,在消息中添加sessionId之后,延迟平均下降到2秒。

E.G.

var topicMsg = { 
     body: new Date().toISOString(), 
     brokerProperties:{ 
      SessionId:'mysession' 
     } 
    }; 
+0

仅供参考,你就会有一个更好的体验阅读Azure.com而不是GitHub上的文档:https://azure.microsoft.com/documentation/articles/service-bus-partitioning/#use-sessions -with分区实体 –

相关问题