• Java——akka actor 简单使用方法


    1、pom.xml添加

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

    2、向自定义Actor发送一个字符串

    HiActor.java
    package com.sfire.m2test.akka;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import akka.actor.AbstractActor;
    import akka.actor.ActorRef;
    import akka.actor.ActorSystem;
    import akka.actor.Props;
    
    /**
     * @FileName: HiActor.java
     * @Author : chong
     * @CreateTime: Apr 27, 2022 3:55:01 PM
     * @Version: 1.0.0
     */
    public class HiActor extends AbstractActor {
    
        private final static Logger LOGGER = LoggerFactory.getLogger(HiActor.class);
    
        @Override
        public Receive createReceive() {
            return receiveBuilder().match(String.class, result -> {
                LOGGER.info("hi , i am an actor..., i get result = " + result);
            }).build();
        }
    
        public static void main(String[] args) {
            // 定义一个Actor管理仓库
            ActorSystem DEFAULT = ActorSystem.create("blaze");
            // 把自定义的Actor放入仓库并起个名字
            ActorRef actorRef = DEFAULT.actorOf(Props.create(HiActor.class), "hi_actor");
            // 告诉HiActor一些消息
            actorRef.tell("something...", actorRef.noSender());
        }
    
    }

    3、向OneActor发送一个对象,OneActor把收到对象的age参数加1,再转发给TwoActor, OneActor再把age加1,回发给OneActor

    OneActor.java
    package com.sfire.m2test.akka;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.alibaba.fastjson.JSONObject;
    
    import akka.actor.AbstractActor;
    import akka.actor.ActorRef;
    import akka.actor.ActorSystem;
    import akka.actor.Props;
    
    /**
     * @FileName: OneActor.java
     * @Author : chong
     * @CreateTime: Apr 27, 2022 4:08:51 PM
     * @Version: 1.0.0
     */
    public class OneActor extends AbstractActor {
    
        private final static Logger LOGGER = LoggerFactory.getLogger(OneActor.class);
    
        @Override
        public Receive createReceive() {
            return receiveBuilder().match(SomeOne.class, someOne -> {
                JSONObject json = new JSONObject();
                json.put("someOne", someOne);
                LOGGER.info(JSONObject.toJSONString(someOne));
    
                // 把收到的消息对象,转而发给 TwoActor
                ActorRef actorRef = this.getContext().actorOf(Props.create(TwoActor.class, TwoActor::new));
                someOne.setAge(someOne.getAge() + 1);
                actorRef.tell(someOne, this.getSelf());
    
            }).build();
        }
    
        public static void main(String[] args) {
            // 定义Actor管理仓库
            ActorSystem actorSystem = ActorSystem.create("blaze");
            // 把OneActor放入仓库
            ActorRef actorRef = actorSystem.actorOf(Props.create(OneActor.class, OneActor::new), "one_actor");
            // 向OneActor发送一个消息对象
            SomeOne someOne = new SomeOne(1, "liming", 19);
            actorRef.tell(someOne, actorRef.noSender());
        }
    
    }

    TwoActor.java

    package com.sfire.m2test.akka;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.alibaba.fastjson.JSONObject;
    
    import akka.actor.AbstractActor;
    import akka.japi.pf.ReceiveBuilder;
    
    /**
     * @FileName: TwoActor.java
     * @Author : chong
     * @CreateTime: Apr 27, 2022  4:36:06 PM 
     * @Version: 1.0.0
     */
    public class TwoActor extends AbstractActor {
        
        private final static Logger LOGGER = LoggerFactory.getLogger(OneActor.class);
    
    
        @Override
        public Receive createReceive() {
            ReceiveBuilder builder = ReceiveBuilder.create();
            builder.match(SomeOne.class, someOne -> {
                LOGGER.info(JSONObject.toJSONString(someOne));
                Thread.sleep(1000);
                // 把消息再回发给发送者
                someOne.setAge(someOne.getAge() + 1);
                this.getSender().tell(someOne, getSelf());
            });
            return builder.build();
        }
    
    }

    SomeOne.java

    package com.sfire.m2test.akka;
    
    /**
     * @FileName: SomeInfo.java
     * @Author : chong
     * @CreateTime: Apr 27, 2022 4:06:55 PM
     * @Version: 1.0.0
     */
    public class SomeOne {
    
        private Integer id;
    
        private String name;
    
        private Integer age;
    
        public SomeOne(int id, String name, Integer age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
    }
  • 相关阅读:
    Linux C 字符串函数 sprintf()、snprintf() 详解
    Linux C 字符串输入函数 gets()、fgets()、scanf() 详解
    Linux C 字符串函数 strlen()、strcat()、strncat()、strcmp()、strncmp()、strcpy()、strncpy() 详解
    Linux C 字符函数 getchar()、putchar() 与 EOF 详解
    Linux C popen()函数详解
    【重装系统】线上Linux服务器(2TB)分区参考方案
    Ubuntu 开机进入命令行模式
    oracle视图总结(创建、查询、改动、删除等)
    UVa 637
    Intent 的Flag属性(Activity在栈位置的主宰者)
  • 原文地址:https://www.cnblogs.com/xingchong/p/16199906.html
Copyright © 2020-2023  润新知