使用Akka的分布式模块,可以构建出不同物理节点的多机协同消息处理系统。本小节通过搭建Akka分布式环境,展示Akka在构建分布式系统上的灵活与方便。
这里通过构建两个物理节点,展示Akka分布式环境的搭建。这两个节点分别是Remo⁃teNode和LocalNode。LocalNode节点的Actor向RemoteNode节点的Actor发送消息,并接收RemoteNode节点返回的结果。
环境的搭建遵循以下步骤如下。
1)配置Remote节点。
2)编写RemoteNodeActor。
3)编写RemoteActorApplication,启动RemoteNodeActor。
4)配置Local节点。
5)编写LocalNodeActor。
6)编写LocalNodeActorApplication,启动LocalNodeActor。
以下分步骤详细介绍。
1.配置Remote节点 要使用Akka搭建分布式系统,首先要引入Akka的Remote模块。首先新建SBT(Sim⁃ple Build Tool)项目,在项目中的build.sbt配置文件中引入Akka的Remote模块。build.sbt配置文件内容如下所示。
Akka Remote模块中利用Netty服务器来建立远程监听,因此搭建分布式环境,需要指定Netty服务器的Ip和监听的端口。为了完成这一任务,Akka通过读取配置文件的方式来获得Netty服务器的Ip和端口。因此需要在application.conf中增加如下的配置。
2.编写RemoteNodeActor
在配置文件中指定了Netty服务器hostname和port。接下来将通过实现Actor Trait书写RemoteNodeActor。RemoteNodeActor只做一件事情,通过receive方法接收信息,然后向发送方返回message+“I’m remote Server”消息。RemoteNodeActor实现如下所示。(www.daowen.com)
在该类中,通过receive方法匹配收到的消息,并向请求端返回message+“i’m remote Server”的消息。
3.编写RemoteActorApplication,启动RemoteNodeActor
在配置好RemoteNodeActor之后,最后需要编写RemoteNodeApplication启动ActorSystem和RemoteNodeActor,RemoteNodeActor启动之后,Netty服务器开始监听2554端口了,等待远程的请求并建立连接。实现代码如下所示。
在RemoteActorApplication的主函数中,通过指定配置初始化ActorSystem。ConfigFacto⁃ry.load方法将默认加载工程根目录下的application.conf配置文件,并通过getConfig方法读取出配置的remoteNode信息。以上的Remote端就构建完毕了,接下来以同样的方法构建LocalActor。
4.配置Local节点
同样新建一个SBT项目,为了使用Akka的Remote模块,同样需要在build.sbt配置文件中引入相关的依赖Jar包,SBT将自动到相应的仓库中下载,其配置同Remote节点的build.sbt配置文件。项目中Scala目录下,有LocalNodeActor和LocalNodeApplication两个文件,在resources目录中存放的application.conf配置文件,application.conf配置文件中,配置localActor,配置代码如下所示。
配置完成之后,接下来编写LocalNodeActor。
5.编写LocalNodeActor 接下来通过实现Actor Trait的方式编写LocalNodeActor,代码如下所示。
在上面代码中,使用context.actorFor(URL)方法得到远程Actor的引用,跟使用本地Ac⁃tor一样使用remoteActor的“?”方法发送message并通过立即返回的Future对象等待返回的结果,打印出RemoteActor响应信息。编写好LocalNodeActor之后,需要启动LocalNodeAc⁃tor,下面就编写LocalNodeActorApplication,启动LocalNodeActor。
6.编写LocalNodeActorApplication,启动LocalNodeActor 最后编写LocalNodeApplication启动NodeActor。代码如下所示。
上面代码中,通过ConfigFactory.load方法,加载工程根目录下的application.conf配置文件,通过getConfig方法读取出LocalNode配置。使用application.conf中的配置初始化ActorSystem,并使用该ActorSystem的actorOf方法创建并启动LocalNodeActor。
至此,简单的分布式Akka环境搭建完毕!运行RemoteNodeApplication,后台打印出RemoteServerStarted@akka://remoteNode@192.168.1.12:2554,其中remoteNode为配置中远程节点的名称,192.168.1.12为远程IP,2554远程端口。结果如下所示。
运行LocalNodeApplication,控 制 台 打 印 出RemoteClientStarted信 息,远 程IP是192.168.1.12,端口是2554。向远程Actor发送Hello消息,远程Actor返回“Hello I’m re⁃mote”,在控制台中打印出来。结果如下所示。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。