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

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 //
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 //
let system = ActorSystem.Create("Alpha")
//
let actor = system.ActorOf<GreetActor>("SomeOne")
//
actor.Tell(new Greet("XX"))

最新文章

  1. py2exe 打包scipy时遇到的问题
  2. Log4j基本用法----日志级别
  3. Dual Palindromes
  4. C++11静态assert
  5. android学习日记05--Activity间的跳转Intent实现
  6. (poj)1679 The Unique MST 求最小生成树是否唯一 (求次小生成树与最小生成树是否一样)
  7. attr
  8. 基于xmpp openfire smack开发之smack类库介绍和使用[2]
  9. 【转】Android开发中的SQLite事务处理,即beginTransaction()方法
  10. Java并发编程:并发容器ConcurrentHashMap
  11. jq仿虾米网flash效果
  12. Code First 启用迁移时出错 &quot;No context type was found in the assembly&quot;
  13. Android开源项目库汇总
  14. vue渲染数据后与owlCarousel轮播插件冲突,失效
  15. jenkins - ssh Server Groups Center
  16. 错误Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future:
  17. 简单利用HTTP中的PUT协议拿下SHELL
  18. Linux命令及lamp搭建
  19. java设计模式---构建者模式
  20. Android--SoundPool

热门文章

  1. 自定义Mybatis框架
  2. 【谁知道C#字段为什么用属性封装?】
  3. 在PowerShell中操作SharePoint对象
  4. SpringBoot浏览器直接访问html
  5. MPI环境配置
  6. Qt 学习之路 2(10):对象模型
  7. poj 2763 求树上的两个节点的最短距离+在线修改答案
  8. Kafka读取__consumer_offsets和Kafka 0.11客户端管理工具AdminClient
  9. Python 基础学习之if语句
  10. oracle中所有表的字段和注释