zoukankan      html  css  js  c++  java
  • AKKA | Hello AKKA

    AKKA是可用于设计跨处理器核心和网络的可伸缩、有弹性的系统的开源库。使用Scala语言编写,是基于Actor模型处理并发,提供了Java和Scala的API。下面总结如何基于SpringBoot搭建hello world项目。

    第一步引入依赖,

      <properties>
            <akka.version>2.6.10</akka.version>
            <scala.binary.version>2.13</scala.binary.version>
       </properties>
    
      <dependency>
           <groupId>com.typesafe.akka</groupId>
           <artifactId>akka-actor-typed_${scala.binary.version}</artifactId>
           <version>${akka.version}</version>
      </dependency>
    <!-- akka-testkit是AKKA提供的测试工具包 -->
      <dependency>
          <groupId>com.typesafe.akka</groupId>
          <artifactId>akka-testkit_${scala.binary.version}</artifactId>
          <version>${akka.version}</version>
          <scope>test</scope>
      </dependency>
    

    创建一个domain class

    public class Request {
        private final String key;
        private final Object value;
    
        public Request(String key, Object value) {
            this.key = key;
            this.value = value;
        }
    
        public String getKey() {
            return key;
        }
    
        public Object getValue() {
            return value;
        }
    }
    

    创建Actor类

    import akka.actor.AbstractActor;
    import akka.event.Logging;
    import akka.event.LoggingAdapter;
    import lombok.ToString;
    
    
    import java.util.HashMap;
    import java.util.Map;
    @ToString
    public class RequestActor extends AbstractActor {
        protected final LoggingAdapter log = Logging.getLogger(context().system(),this);
        protected final Map<String,Object> map = new HashMap<>();
    
        @Override
        public Receive createReceive() {
            return receiveBuilder().
                    match(Request.class,message ->{
                        log.info("Received Request {}",message);
                        map.put(message.getKey(), message.getValue());
                    })
                    .matchAny(o->log.info("Received unknow message {}",o))
                    .build();
        }
    }
    

    创建测试类

    class RequestActorTest {
        ActorSystem system = ActorSystem.create();
        @Test
        public void test() {
            TestActorRef<RequestActor> actorRef = TestActorRef.create(system, Props.create(RequestActor.class));
            actorRef.tell(new Request("key","value"), ActorRef.noSender());
            RequestActor requestActor = actorRef.underlyingActor();
            System.out.println(requestActor.toString());
            assertEquals(requestActor.map.get("key"),"value");
        }
    }
    
  • 相关阅读:
    .net调用Oracle存储过程
    Ext.Net基本讲解
    Sql Server数据库中的数据类型和c#的数据类型的映射表
    c#.net常用字符串函数 .
    Extjs & Ext.net中的一些属性
    Oracle表名做为参数 返回值
    Oracle CASE WHEN 用法介绍
    c开发策略之错误处理
    堆和栈的区别
    assert用法总结
  • 原文地址:https://www.cnblogs.com/jj81/p/13912375.html
Copyright © 2011-2022 走看看