java 高并发框架(Akka)

本文来源,是我在阅读《实战java高并发程序设计》第7章所了解的,参考了这本书,在此记录一下。往后也好翻翻。

大佬地址:很全: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用了之后有什么好处?

一,Akka能给我吗带来什么好处呢?

1,首先,Akka提供了一种称之为Actor的并发模型,粒度比线程还要小,这表明你可以在系统当中创建及其大量的Actor

2,Akka提供了一套容错机制,允许Actor出现异常时进行一些恢复或者重置的操作。

3,Akka不仅可以在单机上构建高并发程序,还可以在网络上构建分布式程序,并提供位置透明的Actor定位服务。

 

二,怎么用?

先来创建一个hello world 程序试试手吧,

创建一个maven工程,

1,添加如下依赖

<dependency>
  <groupId>com.typesafe.akka</groupId>
  <artifactId>akka-actor_2.12</artifactId>
  <version>2.5.2</version>
</dependency>

 

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
}

此配置文件值简单的配置了一下日志级别

 

运行结果:

 

 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值