【问题标题】:Azure Service Bus Queue Listener - NodeJsAzure 服务总线队列侦听器 - NodeJs
【发布时间】:2017-10-09 16:35:53
【问题描述】:

我已经研究过,但找不到如何在 Nodejs 中创建 Azure 服务总线队列侦听器。

到目前为止,我发现的唯一方法是使用 Microsoft Azure SDK for Node.js 将消息逐个请求到队列,这并不划算。任何帮助将不胜感激。

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);
    }
});

【问题讨论】:

标签: node.js azure azureservicebus


【解决方案1】:

对于您的方案,我建议使用Azure Functions,它提供了一个服务总线队列触发器,使您能够通过侦听消息队列将您的代码连接到其他 Azure 服务或本地服务。如需更多信息,请参阅Service Bus bindings

【讨论】:

  • 那可以解决我的问题,我就等着看有没有其他人有解决方案可以用来监听队列而不需要创建 Azure 函数。
【解决方案2】:

正如@aaron-chen 所说,最简单的解决方案是将Azure Function 与Servicebus 触发器一起使用(没有额外无聊的代码...)

如果你不能使用Azure Function,你可以使用azure sdk for node.js,我在他们的repo中找到了这个sample来创建一个监听器:

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);
    }
});

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 2021-12-26
    • 2011-07-22
    • 1970-01-01
    • 2017-02-25
    • 2017-05-07
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多