在没有为Actor作配置的情况下,每一个ActorSystem将有一个缺省的派发器。该缺省派发器可以被配置,默认是使用指定的default-executor的一个Dispatcher
Akka Dispatcher应用
配置文件
application.conf
内容
1 | DispatcherExample{ |
事件处理Actor
1 | public class EchoActor extends AbstractLoggingActor{ |
主类测试示例
主类示例代码
1 | public class DispatcherMain { |
测试示例输出
1 | [INFO] [01/29/2018 17:57:12.527] [dispatcherSystem-defaultDispatcher-7] [akka://dispatcherSystem/user/echoActor/$b] 实例 #3, Hashcode #2058102743 |
切换Dispatcher测试
主类代码
1 | public class DispatcherMain { |
执行输出
1 | [INFO] [01/29/2018 18:02:44.600] [dispatcherSystem-defaultDispatcher1-5] [akka://dispatcherSystem/user/echoActor/$a] 实例 #3, Hashcode #1590930020 |
Akka Remote应用
Akka是一种消息驱动运算模式,它实现跨JVM程序运算的方式是通过能跨JVM的消息系统来调动分布在不同JVM上ActorSystem中的Actor进行运算,前题是Akka的地址系统可以支持跨JVM定位。Akka的消息系统最高境界可以实现所谓的Actor位置透明化,这样在Akka编程中就无须关注Actor具体在哪个JVM上运行,分布式Actor编程从方式上跟普通Actor编程就不会有什么区别了。Akka的Remoting是一种点对点的跨JVM消息通道,让一个JVM上ActorSystem中的某个Actor可以连接另一个JVM上ActorSystem中的另一个Actor。两个JVM上的ActorSystem之间只需具备TCP网络连接功能就可以实现Akka Remoting了。Akka-Remoting还没有实现完全的位置透明化,因为用户还必须在代码里或者配置文件里指明目标Actor的具体地址.
Maven依赖
1 | <dependency> |
服务端消息处理
1 | public class EchoActor extends AbstractLoggingActor{ |
服务端主类示例
主类代码
1 | public class ServerSystem { |
启动日志
1 | [INFO] [01/29/2018 16:48:17.553] [main] [akka.remote.Remoting] Starting remoting |
客户端主类示例
主类代码
1 | public class ClientSystem { |
启动日志
1 | [INFO] [01/29/2018 16:48:26.999] [main] [akka.remote.Remoting] Starting remoting |
服务端日志
1 | [INFO] [01/29/2018 16:48:17.553] [main] [akka.remote.Remoting] Starting remoting |