Akka探索第一个例子by fsharp 1

如何构建一套分布式程序一直是我想知道的问题。

Akka就是一套用来开发分布式系统的开发库。当然开发分布式系统只是它的能力之一。除此之外高度抽象的并行运算能力,轻量级的消息系统,容错能力都是该库的特点。

首先一个重要的概念就是Actor,Akka系统用Actor来表达任务。Actor可以理解为是一个角色,我们通过消息来告诉他做什么事,而不是主动去控制他。既然他不受我们控制,那我们也不用100%的对他负责。我们需要做的是管理好他们,而他们需要把活干好。事件系统还可以将多任务并行运算的能力给释放出来。设想一下,在并行运算中比较多考虑的就是共享资源的处理。多个任务或存或取某个独占资源,这时我们需要把一切安排的井井有条,这是传统的做法。换个角度,如果共享资源由一个任务进行管理呢?需要使用共享资源的任务都给该任务发消息,他们之间通过消息来进行信息传递。清晰的权责划分之后,我们就可以把一些复杂的共享逻辑合并在一处。而任务的执行则可以更顺畅的进行,这是非消息系统所不具有的能力。
Akka的第一个程序
该任务就是简单的构建最基础的内容,网上有fsharp的例子,这里我用fsharp来实现csharp给出的例子,看的更清晰一些。
0.定义消息Message和Actor
1.构建ActorSystem
2.在ActorSystem的基础上生成Actor
3.给Actor发消息,触发Actor的动作

#I __SOURCE_DIRECTORY__
#r @"..\DPinUserControl\packages\Akka.1.2.0\lib\net45\Akka.dll"
#r @"..\DPinUserControl\packages\System.Collections.Immutable.1.3.1\lib\netstandard1.0\System.Collections.Immutable.dll"
#r @"..\DPinUserControl\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll"

open Akka
open Akka.Actor
open System

//0
type Greet(who:string) =
    member x.Who = who

type GreetActor() = 
    inherit ReceiveActor()
    do 
        base.Receive<Greet>(fun (greet:Greet) -> Console.WriteLine("Hello {0}", greet.Who)) |> ignore

//1
let system = ActorSystem.Create("Alpha")
//2
let actor = system.ActorOf<GreetActor>("SomeOne")
//3
actor.Tell(new Greet("XX"))

 

posted @ 2017-05-06 21:09  rigid  阅读(398)  评论(0编辑  收藏  举报