AKKA.NET - Очередь и повтор
В рамках изменения нашего приложения с гигантского монолита на микрофон Мы разрабатываем микросервис уведомлений, который может использоваться всеми другими модулями для отправки уведомлений, таких как электронная почта, SMS, push-уведомления и т. Д.
Одним из клиентов этой службы уведомлений является служба Windows, которую мы планируем разработать, которая запускает уведомления по электронной почте для различных событий, таких как регистрация пользователя, сброс пароля и т. Д. Служба Windows будет иметь 2 части
API на основе REST, который может вызываться такими модулями, как Регистрация пользователя, для запуска уведомлений. Когда вызывается API ReST, эта служба загрузит соответствующий шаблон, заполнит необходимые значения и вызовет службу уведомлений для отправки электронного письма. В случае сбоя вызова API, детали уведомлений должны быть отправлены на задний план, который будет повторять действие в течение фиксированного числа раз, прежде чем отказаться и вызвать ошибку
Фоновая задача, которая будет повторять действие в течение фиксированного числа раз для отправки уведомления, прежде чем отказаться и вызвать ошибку
Наш первоначальный план состоял в том, чтобы использовать очередь для связи между двумя частями. Поток будет таким
Клиент -> API ReST -> загрузить значения шаблона и заливки -> Служба уведомлений о вызовах -> Добавить сообщение в очередь (в случае сбоя уведомления) -> фоновая задача извлекает сообщение из очереди -> действие повторных попыток -> Пометить уведомление как сбойное в случае сбоя максимального количества попыток (которое будет выполнено вручную
Вместо использования очереди, другой подход заключается в использовании постоянных акторов AKKA.NET для этого, поскольку AKKA.NET поддерживает почтовый ящик, но не обнаружил каких-либо похожих вариантов использования... Находимся ли мы на правильном пути, если мы выбираем akka.net... Пожалуйста, отправьте ваши комментарии
1 ответ
Я думаю, что очередь является подходящей абстракцией для этого - публиковать некоторые сообщения в очереди и использовать их для службы уведомлений. Если службы уведомлений не работают, они остаются в очереди до тех пор, пока она не вернется. Что-то наподобие Kafka могло бы подойти для этого, но вы, вероятно, могли бы реализовать что-то в любой базе данных, которую вы сейчас используете. Я, вероятно, не пошел бы по пути Актера, если у вас нет более сложной логики вокруг вещей.