本篇集合Akka应用-分布式计算应用展示在Spring项目中做分布式计算.
工程结构
1 | [root@localhost spring-akka ]$ tree akka-task |
Maven依赖
1 | <properties> |
模块说明
消息相关
- Message: 示例中客户端和服务端通讯的消息定义
服务端相关
- SimpleActor: 服务端事件处理类
- ServerConfig : 服务端实例化配置
- akka-server.conf : 服务端配置
客户端相关
- RouterActor: 消息投递转发类, 用于对于服务端节点进行选取和消息投递
- ClientConfig: 客户端端实例化配置
- akka-client.conf : 客户端配置
应用启动类
- Application: SpringBoot应用主类
容器衔接
- SpringActorProducer & SpringExtension: IndirectActorProducer是Akka提供的Actor生成接口, SpringActorProducer实现该接口, 以ApplicationContextAware为代理生成我们需要的Actor的Props
模块代码
Spring衔接
SpringActorProducer
代码
1 | public class SpringActorProducer implements IndirectActorProducer { |
SpringExtension
代码
1 | public class SpringExtension extends AbstractExtensionId<SpringExtension.SpringExt> { |
消息定义
说明: 消息定义必须实现序列化接口
1 | public class Message implements Serializable{ |
配置文件
服务端配置
1 | akka { |
客户端配置
1 | akka { |
Actor示例
服务端消息处理Actor
1 |
|
客户端路由分发Actor
1 |
|
集群实例化
服务端注解实例化
1 | 4j |
客户端注解实例化
1 | 4j |
Rest测试类
1 | 4j |
SpringBoot主类
1 | 4j |
访问测试
启动SpringBoot应用
1 | 2018-02-05 17:54:13.586 INFO 6523 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) |
访问接口
1 | [root@localhost spring-akka ]$ curl http://localhost:8080/api/akka/cluster/event |
交互日志
1 | 2018-02-05 17:55:37.462 INFO 6523 --- [nio-8080-exec-9] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet' |
集群部署
上面示例演示的在同一台机器上的不同端口进行通讯. 接下来演示在多台机器上的不同配置
服务端配置
1 | akka { |
客户端配置
1 | akka { |
相对于单节点配置,不同的是示例中服务节点都配置为不同IP, 同时摘掉了绑定的akka.remote.netty.tcp.hostname
, 让Akka自动获取实例的通讯IP进行绑定.
配置Dispatcher
客户端配置重定义默认的default-dispatcher
配置thread-pool默认默认
1 | akka { |
执行日志
1 | 2018-02-06 11:49:28.222 INFO 2218 --- [nio-8080-exec-7] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet' |
配置fork-join默认默认
1 | akka { |
客户端配置自定义Dispatcher
1 | akka { |
执行输出
1 | 2018-02-06 11:55:59.839 INFO 2301 --- [nio-8080-exec-3] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet' |