我有几个客户端将消息发送到azure服务总线队列。为了匹配它,我需要使用Node.js从该队列读取多个机器并在消息到达时使用消息。
我已阅读azure service bus queues tutorial,我知道我可以使用receiveQueueMessage
从队列中读取消息。
但是,本教程没有提到如何在收到消息后立即收听队列并阅读消息。
我知道我可以简单地在队列中查询消息,但这会使服务器无法获得真正的好处。
在SO中搜索后,我发现了一个有人遇到类似问题的讨论:
我知道他们最终使用了C#异步方法ReceiveAsync
,但我不清楚是否:
Node.js的文档接近于不存在,其中一个教程是我找到的唯一主要文档。
答案 0 :(得分:2)
根据Azure支持,当队列收到消息时,无法通知。这适用于所有语言。
这个问题有两个主要的解决方法:
使用Azure主题和订阅。这样,您可以让所有客户端订阅事件 ko.bindingHandlers.PLPTileSizeOnHover = {
init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
var data = ko.unwrap(valueAccessor());
// Intiallizing variables for product image animation
var _index = 0;
var imgArray = data.fullImageURLs();
var toBeScrolledBy = 0;
var scroller = $(element).find('.customized-slider').eq(0);
var StopAnimation;
element.onmouseover = function () {
//Start Animation
StopAnimation = setInterval(function () {
var totalSlides = $(element).find('.customized-slider').eq(0).children();
var slideWidth = totalSlides[0] && totalSlides[0].clientWidth;
_index++;
$($(element).find('.product-images')[_index]).attr('src', imgArray[_index]);
if (_index >= imgArray.length) {
_index = 0;
}
toBeScrolledBy = slideWidth * _index;
$(scroller).css({
'transform': 'translateX(-' + toBeScrolledBy + 'px)'
});
}, 1500);
}
element.onmouseout = function () {
//End of animation and reseting the index and div postion
clearInterval(StopAnimation);
_index = 0;
$(scroller).css({
'transform': 'translateX(0)'
});
}
}
}
,并让他们在收到通知后检查队列。这有几个问题:首先你必须支付另一个Azure服务,其次你可以让多个客户尝试阅读相同的消息。
持续轮询。让客户每隔X秒检查一次队列。这个解决方案非常糟糕,因为您最终支付了所产生的网络流量,并且您通过无用的请求将服务垃圾邮件。为了帮助最大限度地减少这种情况,有一个名为长轮询的概念,记录很少,可能不存在。我确实找到了这个NPM模块:https://www.npmjs.com/package/azure-awesome-queue
老实说,此时,您可能想知道为什么要使用此服务。 我同意......
作为替代方案,RabbitMQ是免费的,有社区,良好的文档和更多功能。
这里的缺点是维护一个RabbitMQ容错集群并不是一件容易的事。
另一种选择是Apache Kafka,它也非常可靠。
答案 1 :(得分:0)
我问myslef同样的问题,这里是我发现了什么。
使用谷歌PubSub的,它是你寻找什么。
如果你想留在Azure中,以下IST可能的:
答案 2 :(得分:0)
您可以使用无服务器功能,即“ ServiceBusQueueTrigger”, 消息到达队列后立即调用它们,
在nodejs中进行操作非常简单,您需要在function.json中定义的绑定类型为
“类型”:“ serviceBusTrigger”,
本文(https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus#trigger---javascript-example)可能会提供更多帮助。