Как настроить роль рабочего для прослушивания сообщений очереди шины сервера с помощью окна azure sdk?Azure Node.js Запуск сообщений очереди служебной шины в роли рабочего
В настоящее время у меня есть это в моей server.js роли работника для прослушивания сообщений очереди
var http = require('http')
, config = require('./config')
, azure = require('azure')
, uuid = require('node-uuid');
http.createServer(function (req, res) {
processServices(function() {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('hello world');
});
}).listen(process.env.port);
function processServices(callback) {
var sb1 = azure.createServiceBusService(config.serviceBusNamespace, config.serviceBusAccessKey);
sb1.receiveQueueMessage('startup', function (error, m) {
if (!error) {
writeMessage(JSON.stringify(m), function() {
callback();
});
}
else {
writeMessage(JSON.stringify(error), function() {
callback();
});
}
});
}
function writeMessage(message, callback) {
var serviceClient = azure.ServiceClient;
var ts1 = azure.createTableService(serviceClient.DEVSTORE_STORAGE_ACCOUNT, serviceClient.DEVSTORE_STORAGE_ACCESS_KEY, serviceClient.DEVSTORE_TABLE_HOST);
ts1.getTable('Messages', function (error) {
if (error === null) {
var messageEntity = {
PartitionKey: '0',
RowKey: uuid(),
Message: message
};
ts1.insertEntity('Messages', messageEntity, function (error, newMessage) {
callback();
});
}
else callback();
});
}
И это в моем server.js веб-роли для настройки очереди
var sb1 = azure.createServiceBusService(config.serviceBusNamespace, config.serviceBusAccessKey);
sb1.getQueue('startup', function (error, queue) {
if (error) {
sb1.createQueueIfNotExists('startup', function (error, queue) {
if (!error)
console.log("created startup queue 1: " + JSON.stringify(queue) + "\n");
else
console.log("don't got startup queue 1: " + JSON.stringify(error) + "\n");
});
}
else console.log("created startup queue 2: " + JSON.stringify(queue) + "\n");
});
sb1.getQueue('serialnumbers', function (error, queue) {
if (error) {
sb1.createQueueIfNotExists('serialnumbers', function (error, queue) {
if (!error)
console.log("created serialnumbers queue 1: " + JSON.stringify(queue) + "\n");
else
console.log("don't got serialnumbers queue 1: " + JSON.stringify(error) + "\n");
});
}
else console.log("created serialnumbers queue 2: " + JSON.stringify(queue) + "\n");
});
И в этом мой веб-роль index.js файла, чтобы отправить сообщение в очередь
var azure = require('azure')
, config = require('../utils/config');
exports.index = function (req, res) {
var sb1 = azure.createServiceBusService(config.serviceBusNamespace, config.serviceBusAccessKey);
var startupMessage = {
body: ''
};
sb1.getQueue('startup', function (error, queue) {
if (!error) {
sb1.sendQueueMessage('startup', startupMessage, function (error) {
if (!error) {
console.log("sent startup message 1\n");
res.render('index', {
locals: {
pageTitle: 'Home'
}
});
}
else {
console.log("didn't send startup message 1: " + JSON.stringify(error) + "\n");
res.render('index', {
locals: {
pageTitle: 'Home'
}
});
}
});
}
else {
res.render('index', {
locals: {
pageTitle: 'Home'
}
});
}
});
};
Как я могу получить его так, что й Рабочая роль пользователя прослушивается и выполняется, когда веб-роль запускает файл index.js?
В настоящее время его не делают, сообщения сидят в очереди, но не читаются рабочей ролью?
Как получить рабочую роль для чтения сообщения из очереди?
Должен ли я запускать задание cron или использовать socket.io? Я немного запутался.
hi bbbonthemoon, в соответствии с кодом, который я написал, вы можете дать мне пример того, что вы имеете в виду? cheers –
хорошо, дело в том, что клиент очереди Bus Bus Service, не дожидаясь получения сообщения, когда вы проводите опрос с помощью receiveQueueMessage(), он просто проверяет, есть ли сообщение для вас, если да, он его получает, он ничего не получает и уходит. Поэтому вам нужно вызвать этот метод снова и снова, пока не будет получено сообщение. Создание бесконечного цикла в асинхронной среде - это отдельная тема, я обычно делаю это с помощью событий. Я проверяю очередь на пользовательское событие и запускаю событие, когда я снова готов к опросу. – bbbonthemoon
ok bbbonthemoon спасибо, я подумал, что лучше всего подходит для этого с node.js - это модуль cron, поэтому я буду использовать его. cheers –