学习akka之future

来源:互联网 发布:淘宝客户管理系统 编辑:程序博客网 时间:2024/06/01 08:23

1.maven依赖参考 学习akka之helloword

2.创建actor、

package com.jikuan.zjk.actor;import akka.actor.AbstractActor;import akka.actor.ActorRef;import akka.actor.Props;import akka.actor.Status;import akka.japi.pf.ReceiveBuilder;import scala.PartialFunction;/**BeautifulActor class*jikuan.zjk*/public class BeautifulActor extends AbstractActor {  public PartialFunction receive() {    return ReceiveBuilder         .matchEquals("Hello who are you", s -> {            System.out.println("get " + s + " in BeautifulActor");            sender().tell("I am Beautiful G", ActorRef.noSender());        })        .matchAny(x -> {            System.out.println("get " + x + " in BeautifulActor");            sender().tell(new Status.Failure(new Exception("I dont know what you see")),self());        })        .build();  }  public static Props props (String response) {    return Props.create(BeautifulActor.class, response);  }}

3.创建测试用例

package com.jikuan.zjk.akka;/**FutureTest class*jikuan.zjk*/import akka.actor.ActorRef;import akka.actor.ActorSystem;import akka.actor.Props;import static akka.pattern.Patterns.ask;import java.util.concurrent.CompletableFuture;import java.util.concurrent.CompletionStage;import java.util.concurrent.TimeUnit;import org.junit.Test;import com.jikuan.zjk.actor.BeautifulActor;import scala.concurrent.Future;import sun.net.www.content.audio.x_aiff;import static scala.compat.java8.FutureConverters.*;public class FutureTest {  ActorSystem actorSystem = ActorSystem.create();  ActorRef actorRef = actorSystem.actorOf(Props.create(BeautifulActor.class));    @Test  public void replyToBeautifulActor() throws Exception {    //ask异步    Future future = ask(actorRef,"Hello who are you",1000);    final CompletionStage<String> cs = toJava(future);    final CompletableFuture<String> jFuture = (CompletableFuture<String>) cs;    //get阻塞    assert(jFuture.get(1000, TimeUnit.MILLISECONDS)).equals("I am Beautiful G");      }  @Test  public void replyToUnknowBeautifulActor() throws Exception {    Future future = ask(actorRef,"Hi",1000);    final CompletionStage<String> cs = toJava(future);    final CompletableFuture<String> jFuture = (CompletableFuture<String>) cs;    //都会报错    jFuture.get(1000, TimeUnit.MILLISECONDS);      }  //ask  public CompletionStage<String> askBeautifulActor(ActorRef act,String message,int msecond) {    Future future = ask(act,message,msecond);    CompletionStage<String> cs = toJava(future);    return cs;  }  @Test  public void printReceiveFromBeautifulActor() throws Exception {    askBeautifulActor(actorRef, "Hello who are you", 1000)      .thenAccept(x -> System.out.println(x));    //for wait     Thread.sleep(100);  }}


原创粉丝点击