Доставка как минимум один раз с использованием Akka Persistance и шаблона Extra-Cameo
Я разрабатываю приложение, использующее Akka, в котором актеры предназначены для того, чтобы избегать паттерна "запрос-ответ". Использование шаблона "Extra" или "Cameo" позволяет моделировать взаимодействия между актерами в виде "потока" сообщений.
На рисунке ниже представлена архитектура таких участников.
Шаблон Cameo реализован для обработки ответов, поступающих от SK
актеры.
Теперь представьте, что я хочу гарантировать, по крайней мере, один раз SF
а также SK
актеры. Как я могу это сделать? Реализация семантики с использованием постоянства Akka требует реализации шаблона запрос-ответ между этими субъектами.
Как я могу обеспечить хотя бы один раз семантику между актерами, которые используют Камею для обработки ответов?
большое спасибо
1 ответ
Джейми Аллен помогает мне в Твиттере ответить на этот вопрос. Разговор в твиттере таков.
Я пытаюсь подвести итог дискуссии, что сказал Джейми.
Для надежности, по крайней мере, один раз, использование Akka Cluster и Persistence для достижения этой цели возможно, но, вероятно, излишне. Я говорю, постарайся сделать это простым. Иметь GUID для запроса и отправить его вместе с запросом в три SK.
В сценарии с неизменяемой бухгалтерской книгой вы иногда можете сканировать бухгалтерскую книгу, чтобы избавиться от ошибок с помощью GUID. То, насколько последовательными должны быть эти данные, будет определять это.
Простота обслуживания будет намного проще и избежать частых сбоев. Вы можете обрабатывать идемпотентность на стороне SK одним из нескольких способов: либо отслеживать все GUID, когда запросы обрабатываются через истекающий кэш, либо сохранять GUID с неизменяемыми обновлениями в бухгалтерской книге.
Таким образом, в этом случае лучшим решением будет полное удаление Akka Persistence и сведение проблемы к старой доброй передаче сообщений.
SF
отправляет сообщения SK
актеры, узел Камея ждет SK
ответы. Если такие реакции не приходят в заранее установленное время, узел Камея предупреждает SF
используя сообщение о тайм-ауте. SF
снова отправляет сообщения актерам SK.
Диаграмма, которая представляет вышеуказанное решение, является следующей.
Сообщение красного цвета, помеченное цифрой 5, моделирует сообщение об истечении времени ожидания.
Как сказал Джейми:
Я думаю, что ACK должен быть обязанностью вызывающей стороны, вплоть до отправителя первоначального запроса. Это самый безопасный и простой подход.
Надеюсь, поможет.