简体   繁体   English

Azure Service Bus队列侦听器-NodeJs

[英]Azure Service Bus Queue Listener - NodeJs

I have already researched but could not find how to create an Azure Service Bus queue listener in Nodejs. 我已经进行了研究,但找不到如何在Node.js中创建Azure Service Bus队列侦听器。

The only way I found so far is to use the Microsoft Azure SDK for Node.js to request message by message to the queue which is not cost efficient. 到目前为止,我发现的唯一方法是使用Microsoft Azure SDK for Node.js将消息逐条消息请求到队列,这并不划算。 Any help will be appreciated. 任何帮助将不胜感激。

sbService.receiveQueueMessage(queueName, { isPeekLock: true }, function(err, lockedMessage) {

    if (err) {
        if (err === 'No messages to receive') {
            console.log('No messages');
        } else {
            callback(err);
        }
    } else {
        callback(null, lockedMessage);
    }
});

For your scenario, I would recommend using Azure Functions which provides a Service Bus Queue Trigger that enables you to connect your code to other Azure services or on-premises services by listening to message queues. 对于您的方案,我建议使用Azure函数 ,该函数提供了服务总线队列触发器,使您可以通过侦听消息队列将代码连接到其他Azure服务或本地服务。 For more information, see Service Bus bindings . 有关更多信息,请参见Service Bus绑定

在此处输入图片说明

As @aaron-chen said, simplest solution will be to use Azure Function with a Servicebus trigger (no extra boring code...) 正如@ aaron-chen所说,最简单的解决方案是将Azure Function与Servicebus触发器一起使用(无需额外的无聊代码...)

If you can't use Azure Function , you can use the azure sdk for node.js , I've found this sample form their repo to create a listener: 如果您不能使用Azure Function ,则可以将azure sdk用于node.js ,我从他们的仓库中找到了此示例来创建侦听器:

var azure = require('azure-sb');

function checkForMessages(sbService, queueName, callback) {
    sbService.receiveQueueMessage(queueName, { isPeekLock: true }, function (err, lockedMessage) {
        if (err) {
            if (err == 'No messages to receive') {
                console.log('No messages');
            } else {
                callback(err);
            }
         } else {
             callback(null, lockedMessage);
         }
    });
}

function processMessage(sbService, err, lockedMsg) {
    if (err) {
        console.log('Error on Rx: ', err);
    } else {
        console.log('Rx: ', lockedMsg);
        sbService.deleteMessage(lockedMsg, function(err2) {
            if (err2) {
                console.log('Failed to delete message: ', err2);
            } else {
                console.log('Deleted message.');
            }
        })
    }
}

var idx = 0;
function sendMessages(sbService, queueName) {
    var msg = 'Message # ' + (++idx);
    sbService.sendQueueMessage(queueName, msg, function (err) {
        if (err) {
            console.log('Failed Tx: ', err);
        } else {
            console.log('Sent ' + msg);
        }
    });
}

var connStr = process.argv[2] || process.env.CONNECTION_STRING;
if (!connStr) throw new Error('Must provide connection string');
var queueName = 'sbqtest';

console.log('Connecting to ' + connStr + ' queue ' + queueName);
var sbService = azure.createServiceBusService(connStr);
sbService.createQueueIfNotExists(queueName, function (err) {
    if (err) {
        console.log('Failed to create queue: ', err);
    } else {
        setInterval(checkForMessages.bind(null, sbService, queueName, processMessage.bind(null, sbService)), 5000);
        setInterval(sendMessages.bind(null, sbService, queueName), 15000);
    }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM