LoginSignup
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が使えるか試してみたいです。

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
What you can do with signing up
7