0.maven依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jikuan.zjk</groupId>
<artifactId>akka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>akka</name>
<url>http://maven.apache.org</url>
<properties>
<akka.version>2.4.12</akka.version>
</properties>
<dependencies>
<!-- akka -->
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor_2.12</artifactId>
<version>${akka.version}</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-cluster-tools_2.12</artifactId>
<version>${akka.version}</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-slf4j_2.12</artifactId>
<version>${akka.version}</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-testkit_2.12</artifactId>
<version>${akka.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.scala-lang.modules/scala-java8-compat_2.11 -->
<dependency>
<groupId>org.scala-lang.modules</groupId>
<artifactId>scala-java8-compat_2.11</artifactId>
<version>0.8.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
1.创建消息
package com.jikuan.zjk.message;
/**
* MapMesssage class
* jikuan.zjk
*/
public class MapMessage {
private final String key;
private final Object value;
public MapMessage(String key, Object value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public Object getValue() {
return value;
}
}
2.创建Actor
package com.jikuan.zjk.actor;
import java.util.HashMap;
import java.util.Map;
import com.jikuan.zjk.message.MapMessage;
import akka.actor.AbstractActor;
import akka.event.Logging;
import akka.event.LoggingAdapter;
import akka.japi.pf.ReceiveBuilder;
/*
*HelloWordActor
*jikuan.zjk
*/
public class HelloWordActor extends AbstractActor {
protected final LoggingAdapter log = Logging.getLogger(context().system(), this);
public final Map<String, Object> map = new HashMap<String, Object>();
private HelloWordActor() {
receive(ReceiveBuilder
.match(MapMessage.class, message -> {
log.info("Received Message: {}",message);
map.put(message.getKey(), message.getValue());
})
.matchAny(o -> log.info("received unknow message: {}",o))
.build()
);
}
}
3.创建测试用例
package com.jikuan.zjk.akka;
/*
*HelloWordTest class
*jikuan.zjk
*/
import com.jikuan.zjk.actor.HelloWordActor;
import com.jikuan.zjk.message.MapMessage;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.testkit.TestActorRef;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class HelloWordTest {
ActorSystem system = ActorSystem.create();
@Test
public void sendHelloWordToHelloWordActor() {
TestActorRef<HelloWordActor> actorRef = TestActorRef.create(system, Props.create(HelloWordActor.class));
actorRef.tell(new MapMessage("akka", "HelloWord"), ActorRef.noSender());
HelloWordActor helloWordActor = actorRef.underlyingActor();
System.out.println("get value: " + helloWordActor.map.get("akka"));
assertEquals(helloWordActor.map.get("akka"),"HelloWord");
}
}