Azure 服务总线队列侦听器 - NodeJs
Azure Service Bus Queue Listener - NodeJs
我已经研究过但找不到如何在 Nodejs 中创建 Azure 服务总线队列侦听器。
到目前为止,我发现的唯一方法是使用 Node.js 的 Microsoft Azure SDK 逐条向队列请求消息,这不符合成本效益。任何帮助将不胜感激。
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);
}
});
对于您的场景,我建议使用 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. For more information, see Service Bus bindings。
正如@aaron-chen 所说,最简单的解决方案是将 Azure Function 与服务总线触发器一起使用(没有额外无聊的代码...)
如果你不能使用Azure Function,你可以使用azure sdk for node.js,我找到了这个 sample 形成他们的 repo 来创建一个监听器:
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);
}
});
我已经研究过但找不到如何在 Nodejs 中创建 Azure 服务总线队列侦听器。
到目前为止,我发现的唯一方法是使用 Node.js 的 Microsoft Azure SDK 逐条向队列请求消息,这不符合成本效益。任何帮助将不胜感激。
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);
}
});
对于您的场景,我建议使用 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. For more information, see Service Bus bindings。
正如@aaron-chen 所说,最简单的解决方案是将 Azure Function 与服务总线触发器一起使用(没有额外无聊的代码...)
如果你不能使用Azure Function,你可以使用azure sdk for node.js,我找到了这个 sample 形成他们的 repo 来创建一个监听器:
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);
}
});