@betula

Как писать отчет об обработке сообщения amqp rabbitmq?

Пишу на node.js, драйвер node-amqp, есть скажем такой код:
conn.queue(queueName, function(queue) {
	queue.subscribe(function(msg) {
		performQueueMessage(msg, function(err) {
			// Сообщение обработали, возможно с ошибкой
		});
	});
});

Вопрос:
Есть ли такой режим получения сообщений, что бы rabbitmq не удалял у себя сообщение пока я не скажу ему, "я обработал его без ошибки" и что бы он ждал от меня этого ответа, либо до обрыва соединения, либо n-времени. А если я ему скажу, что я "не обработал сообщение", то что бы rabbitmq снова возвращал сообщение в очередь активным и отдавал, либо снова этому клиенту, либо любому другому.
  • Вопрос задан
  • 2727 просмотров
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Вы можете просто включать сообщение обратно в очередь поменяв его статус. По другому никак, да и не нужно по другому, иначе это все будет выливаться в проблемы, если у вас будет несколько обработчиков очередей.
Ответ написан
Комментировать
@betula Автор вопроса
Контекст задачи такой.
Обработка каждого задания из очереди может быть очень долгой до нескольких минут, заданий очень много. И если в этот момент падает демон node.js я безвозвратно теряю сообщения.
Решения:
1. Делать журнал "транзакций" на стороне демона node.js и самому вести лог взятых на обработку сообщений, их статус и прочее, что бы при старте демона смотреть незавершенные транзакции и пытаться их завершить, скажем через отправку обратно в очередь.
2. Я уверен, что это же самое должен как-то делать rabbitmq.

Если вариант 2 всё-таки невозможен, тогда придется обходиться вариантом 1, и ждать когда в rabbitmq реализуют все чего так в нем не хватает.
Ответ написан
Комментировать
Есть режим подтверждения обработки сообщений
Начать поиски можно отсюда habrahabr.ru/post/150134
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы