Я провел некоторые исследования по этому вопросу, и я бы сделал это следующим образом.
Настройка
beanstalkd
Установка beanstalkd .Другая очередь сообщений, НО , эта поддерживает ЗАДЕРЖКА ПОСТАВЛЕНО .Если вы компилируете из исходного кода, это будет немного сложнее, потому что это зависит от libevent (например, memcached).Но опять же, я не думаю, что вы должны скомпилировать его из исходного кода, потому что есть много доступных бинарных пакетов .Например, в Ubuntu вы можете установить beanstalkd, введя команду:
sudo apt-get install beanstalkd
node-beanstalk-client
Установить клиентскую библиотеку beanstalkd.Лучшим из найденных мной был node-beanstalk-client .Потому что в списке клиентских библиотек beanstalkd эта библиотека не упоминается / не упоминалась (опять же, я могу добавить записи в список, поэтому я добавлю эту).Причины, по которым я предпочитаю эту библиотеку перед другими:
- Пакет Npm : Мне понравилось использовать пакет npm для установки клиентской библиотеки.У других не было.
- Активная разработка : я предпочитаю библиотеки, которые имеют более поздние или более коммиты.
Поэтому установитьпосле установки npm ( способ записи ) вам нужно просто выполнить следующую команду:
npm install beanstalk_client
Код
потребитель.js
var client = require('beanstalk_client').Client;
client.connect('127.0.0.1:11300', function(err, conn) {
var reserve = function() {
conn.reserve(function(err, job_id, job_json) {
console.log('got job: ' + job_id);
console.log('got job data: ' + job_json);
console.log('module name is ' + JSON.parse(job_json).data.name);
conn.destroy(job_id, function(err) {
console.log('destroyed job');
reserve();
});
});
}
reserve();
});
Первый запуск потребителя:
node consumer.js
Следующий запуск producer.js
.Через пять секунд (указанная мной задержка) после того, как вы выполните producer.js
, consumer.js
обработает сообщение.
provider.js
var client = require('beanstalk_client').Client;
client.connect('127.0.0.1:11300', function(err, conn) {
var job_data = {"data": {"name": "node-beanstalk-client"}};
var priority = 0;
var delay = 5;
var timeToRun = 1;
conn.put(priority, delay, timeToRun, JSON.stringify(job_data), function(err, job_id) {
console.log('put job: ' + job_id);
process.exit();
});
});
, чтобы начать только выдачу:
node producer.js