レッスン1.1-アクターとアクターシステム

画像

そしてここにいる! 最初のレッスンへようこそ。

このチュートリアルでは、最初のアクターを作成し、 Akka.NETの基本を紹介します。

基本概念/前提




この最初のレッスンでは、最初のアクターシステムと内部の単純なアクターを使用してコンソールアプリケーションを作成する基本を学びます。 2つのアクターを作成します。1つはコンソールからの読み取り用で、もう1つはいくつかの簡単な処理の後の書き込み用です。

俳優とは何ですか?


「俳優」は、実際にはシステムに参加している人の類似物として想像することができます。 これは、何かをして通信できるオブジェクトです。

オブジェクト指向プログラミング(OOP)に既に精通していることを前提としています。 アクターモデルはオブジェクト指向プログラミング(OOP)に非常に似ています。アクターモデルでは、これらはすべてアクターです。


これを自分自身で常に繰り返します。これらはすべて俳優です(すべてが俳優です) 。 これらはすべて俳優です。 これらはすべて俳優です! システムを開発するとき、タスクが1人のアクターによって実行できるほど小さくなるまで、タスクが分割され、タスク間で委任される人々の階層としてそれを想像してください。

現時点では、次のように考えることをお勧めします。OOPでは、各オブジェクトに単一の明確に定義された目標を与えようとしていますよね? さて、アクターのモデルに違いはありません。特定の目標を与えるオブジェクトのみがアクターと呼ばれるようになりました。

また読むことができます: Akka.NETアクターとは

俳優はどのようにコミュニケーションを取りますか?


アクターは、メッセージを介して、人々と同じように互いに通信します。 これらの投稿は古い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から継承されます

アクターを作成するにはどうすればよいですか?


アクターを作成する際に知っておく必要のある主なものが2つあります。



3番目のレッスンで小道具を詳しくていきますので、今は心配しないでください。 ソースコードでPropsを提供したので、 Propsを使用してアクターを作成する方法を理解する必要があります。

ActorSystemとは何ですか?


ActorSystemは、基になるシステムとAkka.NETフレームワークへの参照です。 すべてのアクターは、このアクターシステムのコンテキストで生きています。 このActorSystemのコンテキストから最初のアクターを作成する必要があります

ところで、 ActorSystemは非常に重いオブジェクトです。アプリケーションごとに1つだけ作成してください。

Iiiiii ...行こう! これで、最初の俳優に飛び込み、作成するのに十分な概念資料ができました。

運動




もっと深く行きましょう。

注:提示されたコードには、 「ここに記入する必要があります」とマークされたセクションがあります-コードのこれらの領域を見つけ、目標を達成するために対応する機能を記入し始めます。


空のプロジェクトを実行する


DoThisフォルダーに移動し、Visual StudioでWinTailを開きます。 このソリューションは、シンプルなコンソールアプリケーションで構成されています。

このソリューションは最初の部分で使用します。

NuGetから最新のAkka.NETパッケージをインストールします


NuGetパッケージマネージャーコンソールで、次のコマンドを記述します。

 Install-Package Akka 


これにより、この例をコンパイルするために必要な最新のAkka.NETライブラリがインストールされます。
次に、 名前空間使用しProgram.csファイルの最上部に追加する必要があります

 // in Program.cs using Akka.Actor; 


初めてのActorSystemを作成する


Program.csに移動し、次の行を追加します。

 MyActorSystem = ActorSystem.Create("MyActorSystem"); 


PropsActorSystem、またはActorRefを作成すると、 新しいキーワードが表示されることはほとんどありません。 これらのオブジェクトは、Akka.NETに組み込まれているメソッドファクトリを使用して作成する必要があります。 新しいキーワードを使用する場合は、間違いを犯している可能性があります。


ConsoleReaderActorとConsoleWriterActorを作成する


アクタークラス自体は既に存在しますが、オブジェクト自体を作成する必要があります。

繰り返しますが、 Program.csでActorSystemを作成した場所のすぐ下に追加します。

 var consoleWriterActor = MyActorSystem.ActorOf(Props.Create(() => new ConsoleWriterActor())); var consoleReaderActor = MyActorSystem.ActorOf(Props.Create(() => new ConsoleReaderActor(consoleWriterActor))); 


ConsoleReaderActorにConsoleWriterActorにメッセージを送信させます


俳優を働かせましょう。

これを行うには、以下を行う必要があります。

1. ConsoleReaderActorが、コンソールから読み取ったばかりのコンテンツを含むメッセージをConsoleWriterActorアクターに送信するようにします。
 // in ConsoleReaderActor.cs _consoleWriterActor.Tell(read); 


2. ConsoleWriterActorメッセージを送信した後、ConsoleReaderActorが自分自身にメッセージを送信するようにします。 これにより、コンソールコマンドを読み取るループが作成されます。

 // in ConsoleReaderActor.cs Self.Tell("continue"); 


3.コンソールから読み取りを開始するために、ConsoleReaderActorに初期メッセージを送信します。
 // in Program.cs consoleReaderActor.Tell("start"); 


ステップ5:ビルドして実行します!


変更が完了したら、F5キーを押してVisual Studioでサンプルをコンパイルおよび実行します。
すべてが正しく行われた場合、次のようなものを見る必要があります。



終わったら


コードをCompletedフォルダー内のコードと比較して、この例に含まれる手順を確認してください。

Source: https://habr.com/ru/post/J253575/


All Articles