Доброго времени суток.
В проекте реализованы очереди на RabbitMQ с алгоритмом round-robin распределения задач по воркерам. Выявлена проблема - имеется три воркера, первый получил задачу - работает, второй, третий получили - быстро отработали. Первый воркер все еще занят, в очереди появилось еще одно задание и оно ждет освобождения первого воркера вместо того, чтобы передать следующему свободному.
Возможно исправить эту ситуацию, оставив алгоритм round-robin, чтобы свободные воркеры по очереди получали задачи? Спасибо.
Код создания задачи (PHP):
$channel->queue_declare($queueName, false, false, false, false);
$message = new AMQPMessage($task, [
'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT
]);
$channel->basic_publish($message, '', $queueName);
Код подключения воркера:
$channel->queue_declare($queueName, false, false, false, false);
$channel->basic_consume(
$queueName, '',
false, true, false, false,
$handler
);
while (count($channel->callbacks)) {
$channel->wait();
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости