Akka
再忍不住吐槽一句:最近状态真的太差了,不顺心呐!另外写博客可比写代码要烦的多了;
Akka是什么?
参考官方文档是这样介绍的:
简单来讲:
- 1.Akka是一个用Scala编写的库
- 2.用于构建高并发,分布式,可容错,事件驱动的基于JVM应用
- 3.支持Java,Scala
Akka采用的是Actor模型
Actor模型(我的理解):
- Actor就是一个实体,在开发程序过程中我们就是对实体之间怎么进行交互做处理
- Actor相互之间是独立的,多个Actor进行交互的只能通过消息(Message)来进行发送接收–>处理
- 如果一个Actor在某一个时刻接收多个Actor发送过来的消息(message),这就会产生并发问题,所以我们还需要一个消息队列来进行消息的存储,分发;
具体请参考 - 以Akka为示例,介绍Actor模型
Akka的产生使编写高并发分布式应用更加方便
详细介绍请参考:
Akka安装配置
在Java中我们有两种方式使用Akka:
- 作为一个库,直接引入Jar包使用
- 微内核–> 将应用放到独立的内核里
Typesafe Activator
我在这里主要介绍第一种方式,第二种方式请参考微内核使用Akka
首先介绍Typesafe Activator:
Typesafe Activetor实际就是一个Akka使用的IDE,集成了Java和Scala两种语言
首先从Typesafe官网下载压缩包(408M),下载完成之后解压:
解压之后启动方式(ubuntu环境下):
命令行进入~/activator-dist-1.3.5目录下:
./activator ui
如图:
这样的话,Typesafe Activetor启动完成使用http://127.0.0.1:8888进行访问
Java中Jar使用
首先从官网下载项目akka 2.3.12 Release
下载的时候注意版本,我现在使用的是2.3.12,现在网上好多akka的例子是基于1.x版本,而2.x版本进行许多改变;
在eclipse中新建一个akka库,将akka-2.3.12/lib/akka其jar包添加进去,如图:
可能你的项目不需要全部包可以去除一些不必要的jar包
注意一点在下载后的akka-2.3.12项目lib/akka中不存在这个包,缺少这个包你编写基于akka代码会编译不通过
因为akka本身是使用scala语言写的,缺少scala-library-2.x.x.jar会编译不了
这个包在akka-2.3.12/lib目录下
这是自己引入jar包使用的方式
在Maven中使用Akka则是十分方便了,直接在pom.xml中添加akka依赖库使用就可以
请参考Maven中使用akka
在构建Akka远程项目出现的小问题
我是在Typesafe Activetor环境下直接下载其akka-remote-sample-java例子放到本地运行调试
发布代码如下:
//注册计算器实体(Worker)
public static void startRemoteCalculatorSystem() {
final ActorSystem system = ActorSystem.create("CalculatorSystem",
ConfigFactory.load(("calculator")));
system.actorOf(Props.create(CalculatorActor.class), "calculator");
System.out.println("Started CalculatorSystem");
}
//使用注册的计算器实体(Worker),通过url来进行找到注册的Wroker实体类
public static void startRemoteLookupSystem() {
final ActorSystem system = ActorSystem.create("LookupSystem",
ConfigFactory.load("remotelookup"));
final String path =
"akka.tcp://CalculatorSystem@127.0.0.1:2552/user/calculator";
final ActorRef actor = system.actorOf(
Props.create(LookupActor.class, path),
"lookupActor");
...........
}
我们如果这样直接运行的话,akka.tcp://CalculatorSystem@127.0.0.1:2552/user/calculator这个地址找不到对应的calculator计算器类;
开始纠结了蛮久,但是我想了一下这个2552这个端口是哪里来的,这个程序不可能会直接使用2552端口的;
所以需要几个配置文件类进行配置(我直接拿Typesafe Activetor环境下的那个例子的配置文件)
最后运行成功:
配置文件如下图: