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+)?

Другие вопросы по тегам