大佬地址:很全:https://blog.csdn.net/qq_35246620/article/details/79050895?utm_medium=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.nonecase
Akka是用Scala创建的,Scala也是java虚拟机上的语言,和java差不多。
学习一个框架或者一门技术,无外乎这三点,1是什么?2怎么用?3用了之后有什么好处?
1,首先,Akka提供了一种称之为Actor的并发模型,粒度比线程还要小,这表明你可以在系统当中创建及其大量的Actor
2,Akka提供了一套容错机制,允许Actor出现异常时进行一些恢复或者重置的操作。
3,Akka不仅可以在单机上构建高并发程序,还可以在网络上构建分布式程序,并提供位置透明的Actor定位服务。
先来创建一个hello world 程序试试手吧,
创建一个maven工程,
1,添加如下依赖
com.typesafe.akka
akka-actor_2.12
2.5.2
2,创建 欢迎者
package org.buptdavid.datastructure.zj.akka.demo1;
import akka.actor.UntypedAbstractActor;
/**
* 欢迎者
*/
public class Greeter extends UntypedAbstractActor{
public enum Msg{
GREET,DONE
}
@Override
public void onReceive(Object message) throws Throwable {
if(message==Msg.GREET){
System.out.println("hello actor...");
getSender().tell(Msg.DONE,getSelf());
}else {
unhandled(message);
}
}
}
UntypedAbstractActor(无类型的,不能再继承其他类(java单继承))就是我们所说的Actor
再来创建一个与Greeter 交流的另外一个Actor ,HelloActor如下:
package org.buptdavid.datastructure.zj.akka.demo1;
import akka.actor.ActorRef;
import akka.actor.Props;
import akka.actor.UntypedAbstractActor;
public class HelloActor extends UntypedAbstractActor{
ActorRef greeterRef;
@Override
public void preStart() throws Exception { //是Akka的回调方法,在Actor启动前会被Akka调用,完成一些初始化操作
greeterRef = getContext().actorOf(Props.create(Greeter.class), "greeter");
System.out.println("Greeter Actor Path :"+greeterRef.path());
greeterRef.tell(Greeter.Msg.GREET,getSelf());
}
@Override
public void onReceive(Object msg) throws Throwable {//消息处理函数
if(msg==Greeter.Msg.DONE){
greeterRef.tell(Greeter.Msg.GREET,getSelf());
getContext().stop(getSelf());//让自己停止
}else{
unhandled(msg);
}
}
}
现在来创建一个测试HelloMainSimple:
package org.buptdavid.datastructure.zj.akka.demo1;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import com.typesafe.config.ConfigFactory;
public class HelloMainSimple {
public static void main(String[] args) {
ActorSystem actorSystem = ActorSystem.create("Hello", ConfigFactory.load("samplehello.conf"));
ActorRef helloactor = actorSystem.actorOf(Props.create(HelloActor.class), "helloactor");//创建一个接收该对象管理的actor对象
System.out.println("helloactor Actor path "+helloactor.path());
}
}
上面代码解释
ActorSystem.create 第一个参数为系统名称,此定义的名称为hello ,第二个参数为配置文件
在此我们需要提供一个配置文件 samplehello.conf
内容如下:
akka{
loglevel=INFO
}
此配置文件值简单的配置了一下日志级别
运行结果: