Нормально ли создавать множество очередей на один и тот же ивент?
Доброго времени суток, коллеги.
Кейс
Есть некоторое событие, которое оповещает систему через сообщение. Это сообщение подхватывает консьюмер и выполняет некоторую бизнес-логику. Все стандартно.
Но есть нюанс. Этот ивент интересует несколько агентов внутри приложения. Более того, их бизнес-задачи не связаны между собой. В качестве решения данной проблемы, я реализовал концепцию обработчиков. Где консьюмер получает сообщение и запускает N обработчиков из регистра, передавая в каждый обработчик полученное сообщение.
Тут возникает проблема, например, если хендлер не смог выполнить задачу и ее снова нужно послать в очередь, что все успешно выполнившие хендлеры выполнят эту задачу еще раз, что создаст сайд-эффекты.
Подскажите, нормально ли на каждую отдельную бизнес-задачу связанную с ивентом создавать отдельную очередь?
Приходит сообщение, о регистрации нового пользователя в exchange, например, user.new оттуда сообщение направляется в очередь user.new.queue_one. Существует ряд критически важных бизнес задач, которые нужно выполнить на это событие. Например, отправить уведомление на email, sms-оповещение, добавить данные в базу, обновить некоторые записи.
Все эти действия сейчас выполняются в одном консьюмере. Консьюмер пробегается по списку обработчиков и исполняет задачи.
Вопрос в том, можно ли под каждую такую критически важную задачу создать отдельную очередь и отдельный консьюмер? Зачем? Например по этой причине:
Тут возникает проблема, например, если хендлер не смог выполнить задачу и ее снова нужно послать в очередь, что все успешно выполнившие хендлеры выполнят эту задачу еще раз, что создаст сайд-эффекты.