Akka.net: заверение сообщения о тайм-ауте всегда запускается
Представьте, что у вас есть актер, у которого есть "деловой" тайм-аут. Я бы хотел, чтобы этот тайм-аут был запущен, даже если сервер, на котором живет актер, умирает или перезагружается. Я бы создал этого актера как настойчивого.
Каков наилучший способ гарантировать, что тайм-аут будет запущен, даже если один сервер выйдет из строя?
Спасибо
1 ответ
Я бы настроил это так:
BA => (rqTimeoutMsg) => GDA => TM (waits) => BA => (confirmation) => TM => GDA
BA = ваш бизнес актер
GDA = актер гарантированной доставки (Akka.Persistence)
TM = timeoutManager
BA отправляет запрос "timeout" в "GDA", который перенаправляет его менеджеру "Timeout". Он ждет, пока время X (с использованием планировщика, я бы посоветовал) отправляет "тайм-аут" в BA, который должен подтвердить его обратно в TM или напрямую в GDA.
GDA и TM вместе образуют постоянный TimeoutManager, так что они могут / должны быть объединены в одном Actor, с которым БА взаимодействует (requestTimeout, и после получения timeout подтверждение ReceptionOfTimeout).
Вопрос, однако: как вы планируете убедиться, что БА находится там после перезагрузки (crash+)?