- PVSM.RU - https://www.pvsm.ru -

И вот мы здесь! Добро пожаловать на первый урок.
В этом уроке вы создадите ваши первые акторы и будете введены в основы Akka.NET [1].
«Актор» на самом деле можно представить как аналог человека участвующего в системе. Это объект, который может что-то делать и общаться.
Мы будем считать, что вы уже знакомы с объектно-ориентированным программированием (ООП). Модель акторов очень похожа на объектно-ориентированное программирование (ООП), в моделе акторов все это акторы.
Повторяйте это постоянно для себя: все это акторы (everything is an actor). Все это акторы. Все это акторы! При разработке системы представляйте её как иерархию людей, где задачи разделяются и делегируются между ними до тех пор пока задача не станет настолько малой, чтобы её мог выполнить один актор.
На данный момент, мы предлагаем думать так: в ООП вы пытаетесь дать каждому объекту одну, вполне определенную цель, правильно? Что ж, модель акторов ничем не отличается, только теперь объекты, которым вы даете определенную цель называются акторы.
Так же можно почитать: What is an Akka.NET Actor [2]?
Акторы общаются друг с другом так же как это делают люди, путем обмена сообщениями. Эти сообщения просто старые классы C#.
//this is a message!
public class SomeMessage
{
public int SomeValue {get; set}
}
О сообщения мы подробнее поговорим в следующем уроке, так что не волнуйтесь об этом сейчас. Все, что вам нужно знать, это то, что вы отправляете сообщения методом Tell() другому актору.
//send a string to an actor
someActorRef.Tell("this is a message too!");
Все, что вы можете написать. Реально.
Вы программируете акторы для обработки сообщений, которые они получают и они могут делать с ними все что нужно, для работы. Обращайтесь к базе данных, пишите в файл, изменяйте внутренние переменные или еще что-нибудь, что вам надо.
Но в дополнение к обработке сообщений, которые он получает, акторы также могут делать другие действия:
Акторы по своей сути асинхронны (больше об этом в будущих уроках), и модель акторов ничего не говорит о том, какой из акторов что должен сделать или в каком порядке. Это вам решать.
Все акторы унаследованы от UntypedActor, но не беспокойтесь об этом сейчас. Мы охватим различные типы акторов позже.
В первой части все ваши акторы будут унаследованы от UntypedActor [3].
Есть две основных вещи, которые надо знать при создании актора:
Мы более глубоко познакомимся с Props в третьем уроке, так что не беспокойтесь сейчас об этом. Мы предоставили Props для вас в исходном коде, так что вы должны просто выяснить как использовать Props, чтобы создать актора.
ActorSystem является ссылкой на лежащей в основе систему и Akka.NET фреймворк. Все акторы живут в контексте этой системы акторов. Вы должны будете создать свои первые акторы из контекста этого ActorSystem
Кстати, ActorSystem очень тяжелый объект: создавайте его только одного на приложение.
Иииииии… поехали! У вас достаточно концептуального материала сейчас, чтобы нырнуть и сделать свои первые акторы.
Примечание: В представленном коде есть секции с пометкой «YOU NEED TO FILL IN HERE» — найдите эти регионы кода и начните заполнять их соответствующей функциональностью, чтобы достичь цель.
Перейдите в папку DoThis [4] и откройте WinTail [5] в Visual Studio. Солюшен состоит из простого консольного приложения.
Вы будете использовать этот солюшен в течение всей первой части.
В консоли пакетного менеджера NuGet напишите следующую команду:
Install-Package Akka
Это установит последние библиотеки Akka.NET, которые вам понадобятся, чтобы скомпилировать этот пример.
Потом вы должны добавить using namespace в самый верх файла Program.cs
// in Program.cs
using Akka.Actor;
Перейдите в Program.cs и добавьте следующую строку:
MyActorSystem = ActorSystem.Create("MyActorSystem");
ПРИМЕЧАНИЕ: Когда вы создаете Props, ActorSystem или ActorRef вы будете очень редко видеть ключевое слово new. Эти объекты должны быть созданы через фабрику методов встроенную в Akka.NET. Если вы используете ключевое слово new возможно вы совершаете ошибку.
Сами классы акторов уже есть, но вам придется создать сами объекты.
Снова, в Program.cs добавьте чуть ниже где вы создали свою ActorSystem:
var consoleWriterActor = MyActorSystem.ActorOf(Props.Create(() => new ConsoleWriterActor()));
var consoleReaderActor = MyActorSystem.ActorOf(Props.Create(() => new ConsoleReaderActor(consoleWriterActor)));
Самое время заставить ваши акторы работать.
Для этого вам необходимо сделать:
1. Пусть ConsoleReaderActor отправляет сообщение актору ConsoleWriterActor содержащее контент который мы только что прочли из консоли.
// in ConsoleReaderActor.cs
_consoleWriterActor.Tell(read);
2. Пусть ConsoleReaderActor отправляет сообщение самому себе после отправки сообщения ConsoleWriterActor. Это создаст цикл чтения консольных команд.
// in ConsoleReaderActor.cs
Self.Tell("continue");
3. Отправьте начальное сообщение в ConsoleReaderActor для того, чтобы начать чтение с консоли.
// in Program.cs
consoleReaderActor.Tell("start");
Когда вы закончите свои изменения, нажмите F5 для компиляции и запуска примера в Visual Studio.
Вы должны будете увидеть что-то вроде этого, если все сделали правильно:

Сравните свой код с кодом в папке Completed [6] чтобы увидеть инструкции включенные в этот пример.
Автор: Shersh
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/c-2/86422
Ссылки в тексте:
[1] Akka.NET: http://getakka.net/
[2] What is an Akka.NET Actor: http://petabridge.com/blog/akkadotnet-what-is-an-actor/
[3] UntypedActor: http://getakka.net/wiki/Working%20with%20actors#untypedactor-api
[4] DoThis: https://github.com/petabridge/akka-bootcamp/blob/master/src/Unit-1/DoThis
[5] WinTail: https://github.com/petabridge/akka-bootcamp/blob/master/src/Unit-1/DoThis/WinTail.sln
[6] Completed: https://github.com/petabridge/akka-bootcamp/blob/master/src/Unit-1/lesson1/Completed
[7] Источник: http://habrahabr.ru/post/253575/
Нажмите здесь для печати.