У меня есть три актера для обработки сценария CQRS. ProductWorkerActor обрабатывает командную часть, ProductQueryWorkerActor обрабатывает часть запроса и ProductStateActor обрабатывает государственную часть.Извлечение государственных акторов через артистов-актеров в AKKA
Путь я обработки запроса является использование:
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 названным фьючерсом?
Должен ли я раскрывать состояние как DTO для наружной работы, а не для самого актера?
Для изменения любого состояния продукта, я должен заниматься обработкой сообщений в ProductWorkerActor или ProductStateActor самих? Во втором случае ProductWorkerActor посылает сообщение ProductStateWorker, в ProductStateWorker обрабатывает сообщение, измените состояние и отправить еще одно сообщение ProductWorkerActor, что прошло проверку и изменил состояние.
Отличные ответы по пунктам 1 и 2. У меня есть вдохновение, чтобы отделить Рабочего Актера и Государственного Актера от книги Essential AKKA от Jamie Allen. В этом он предлагает разделить состояние и поведение. –
«actor.Forward» не работает, потому что актер - это ActorSelection. У ActorSelection нет форвардного расширения. Я не уверен, как я могу получить базового актера из ActorSelection, чтобы я мог сделать Forward. –
Вперед - это в основном эквивалент 'Tell (message, Sender)'. Также будьте осторожны при работе с выборами актеров - они не должны использоваться, если они действительно не нужны. На этом есть несколько [лекций] (https://petabridge.com/blog/when-should-I-use-actor-selection/). – Horusiath