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);
}
}