#まえがき
社内の勉強会で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の解説
##プロジェクトのセットアップ
PM> Install-Package Akka
##Usingステートメントの追加
Akka と Akka.Actor を追加します。
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 を定義します。
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 を定義します。
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で生成したアクターシステムを利用して、アクター GreetingActor を生成する
- メッセージを送信する(Tell)
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() は、アクターが処理を完了する前にコンソールが終了しないようにするためのもの。
#あとがき
そもそもAkkaを概要でしか知らないので、誤っているところがあるかもしれません。
試してみる方はご注意ください。
また公式サイト Get Started Now のコードをほぼそのまま持ってきていますが、
ライセンス的に問題がある場合は本記事を削除します。
Monoでも動作する、ということですので
時間があったらLinuxなりMacでAkka.NETが使えるか試してみたいです。