2016-01-06 118 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分區實體 –

相關問題