【发布时间】:2016-01-06 19:47:43
【问题描述】:
我正在使用最新的可用 npm 包 - 0.10.6 (https://www.npmjs.com/package/azure) 试验 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 重现。
此外,如果 分区已关闭,那么我不会再遇到任何明显的延迟,并且该行为也不再可重现。
查看适用于 Node.js 的 Azure SDK,我注意到调用了以下端点(当调用 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,我也会观察到所描述的延迟。
如果有人能帮助我了解导致这种行为的原因,我将不胜感激。 提前谢谢你。
【问题讨论】:
标签: node.js azure servicebus