У меня есть три актера для обработки сценария CQRS. ProductWorkerActor обрабатывает часть команды, ProductQueryWorkerActor обрабатывает часть запроса, а ProductStateActor обрабатывает часть состояния.
Я обрабатываю запрос, используя:
ProductQueryWorkerActor.Ask<ProductState>("give-me-product-state-for-product-1000")
Код из ProductQueryWorkerActor:
if (message == "give-me-product-state-for-product-1000")
{
var actor = Context.ActorSelection("akka://catalogSystem/user/productState/1000");
var psDTO = actor.Ask<ProductStateDTO>(message).Result;
Sender.Tell(ps);
}
Не обращайте внимания на путь, используемый для доступа к состоянию продукта. Он запрограммирован жестко и намеренно, чтобы упростить чтение кода.
Должен ли я использовать Ask, как я использовал в этом случае, для получения состояния продукта? Ask называется фьючерсом?
Должен ли я выставлять состояние как DTO для внешней работы, а не самого актера?
Чтобы изменить какое-либо состояние продукта, должен ли я обрабатывать сообщения в ProductWorkerActor или в самом ProductStateActor? Во втором случае ProductWorkerActor отправляет сообщение ProductStateWorker, ProductStateWorker обрабатывает сообщение, изменяет состояние и отправляет другое сообщение ProductStateWorker. >ProductWorkerActor, что он прошел проверку и изменил состояние.