![](/img/trans.png)
[英]Using a Node js Azure function to send custom properties on a message to a service bus topic
[英]Azure Service Bus Topic - delays when receiving a message using the Node.js SDK
我正在使用最新的可用 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,我也会观察到所描述的延迟。
如果有人能帮助我了解导致这种行为的原因,我将不胜感激。 先感谢您。
尝试对分区实体使用会话。 在我的测试中,在消息中添加sessionId
后,延迟平均下降到 2 秒。
例如
var topicMsg = {
body: new Date().toISOString(),
brokerProperties:{
SessionId:'mysession'
}
};
看起来您正在使用依赖于 HTTP REST api 的旧版azure-sb
包。 我建议使用较新的@azure/service-bus
包,它使用更快的 AMQP 实现,并且没有您发现会导致延迟的调用
我知道这是一个迟到的回复,但以防万一有人遇到旧服务总线节点 SDK 的问题并登陆这里,请参阅下面的链接。
@azure/service-bus
的最新版本 7.0.0(基于 AMQP - 更快/性能更好)已经发布。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.