LoginSignup
10
7

More than 5 years have passed since last update.

Akka.NETのサンプルを動かしてみる(Visual Studio編)

Last updated at Posted at 2015-08-24

まえがき

社内の勉強会でReactive Systemのオハナシを聴いてAkkaというものの存在を知ったけど、
.NETerな私には正直無縁なのかな?と思っていました。

でも、Akkaの公式サイトを見たら.NET Framework/Mono版の
Akka.NETというのがあるとのこと。
http://getakka.net/

Get Started Now を試してみたら案外アッサリ動いたのでメモを残しておきます。

必要環境

  • Windows OS搭載のPC
  • Visual Studio 2013/2015(NuGet Package Managerが動作する環境)

実際の検証環境

  • Windows 7 Professional 64bit
  • Visual Studio 2013 Community

Get Started Nowの解説

プロジェクトのセットアップ

  1. 新規プロジェクトの作成
    C#のコンソールアプリケーションを作成します。
    AkkaSample001.png

  2. NuGet Package Managerの起動
    (最初どこから起動するのかわからなかった・・・)
    AkkaSample002.png

  3. Akka.NETのインストール
    Install-Packageコマンドでインストールします。
    AkkaSample003.png

PM> Install-Package Akka

Usingステートメントの追加

AkkaAkka.Actor を追加します。

Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// 2行を追加
using Akka;
using Akka.Actor;

namespace GetStartedNowCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

メッセージを定義する

アクターへ送るメッセージの型 Greet を定義します。

Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Akka;
using Akka.Actor;

namespace GetStartedNowCSharp
{
    // メッセージ型
    public class Greet
    {
        public string Who { get; private set; }

        public Greet(string who)
        {
            Who = who;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

アクターを定義する

メッセージ Greet を受け取るアクター GreetingActor を定義します。

Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Akka;
using Akka.Actor;

namespace GetStartedNowCSharp
{
    public class Greet
    {
        public string Who { get; private set; }

        public Greet(string who)
        {
                Who = who;
        }
    }

    // アクターの定義
    public class GreetingActor : ReceiveActor
    {
        public GreetingActor()
        {
            Receive<Greet>(greet =>
                Console.WriteLine("Hello {0}", greet.Who));
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

アクターシステムとアクターを生成し、アクターへメッセージを送る

クラス Program のMainメソッドで以下の処理を行います。
1. アクターシステムを生成
2. 手順1で生成したアクターシステムを利用して、アクター GreetingActor を生成する
3. メッセージを送信する(Tell)

Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Akka;
using Akka.Actor;

namespace GetStartedNowCSharp
{
    public class Greet
    {
        public string Who { get; private set; }

        public Greet(string who)
        {
            Who = who;
        }
    }

    public class GreetingActor : ReceiveActor
    {
        public GreetingActor()
        {
            Receive<Greet>(greet =>
                Console.WriteLine("Hello {0}", greet.Who));
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // アクターシステムの生成
            var system = ActorSystem.Create("MySystem");
            // アクターシステムからアクターを生成
            var greeting = system.ActorOf<GreetingActor>("greeting");

            // アクターへメッセージ送信
            greeting.Tell(new Greet("World"));
            greeting.Tell(new Greet("黒猫"));

            // 非同期処理が完了する前にコンソールが終了するのを防止する
            Console.ReadLine();
        }
    }
}

※最後の Console.ReadLine() は、アクターが処理を完了する前にコンソールが終了しないようにするためのもの。

結果

AkkaSample004.png

あとがき

そもそもAkkaを概要でしか知らないので、誤っているところがあるかもしれません。
試してみる方はご注意ください。
また公式サイト Get Started Now のコードをほぼそのまま持ってきていますが、
ライセンス的に問題がある場合は本記事を削除します。

Monoでも動作する、ということですので
時間があったらLinuxなりMacでAkka.NETが使えるか試してみたいです。

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7