Akka的Hello world

4 篇文章 0 订阅
4 篇文章 0 订阅
package HelloAkkaJava;

import java.io.Serializable;
import java.util.concurrent.TimeUnit;

import scala.concurrent.duration.Duration;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Inbox;
import akka.actor.Props;
import akka.actor.UntypedActor;

public class HelloAkkaJava {

	public static class Greet implements Serializable {
		private static final long serialVersionUID = -7238696787881084470L;
	}

	/**
	 * 谁发起的问候
	 */
	public static class WhoToGreet implements Serializable {

		private static final long serialVersionUID = 6394090910686796569L;

		public final String who;

		public WhoToGreet(String who) {
			this.who = who;
		}
	}

	/**
	 * 问候
	 */
	public static class Greeting implements Serializable {

		private static final long serialVersionUID = 1883804227616246995L;
		// 问候内容
		public final String message;

		public Greeting(String message) {
			this.message = message;
		}
	}

	/**
	 * 接待员
	 */
	public static class Greeter extends UntypedActor {

		String greeting = "";

		public void onReceive(Object message) {

			if (message instanceof WhoToGreet) {
				greeting = "你好, " + ((WhoToGreet) message).who;
			} else if (message instanceof Greet) {
				// 发送当前问候返回给发送者
				getSender().tell(new Greeting(greeting), getSelf());
			} else {
				unhandled(message);
			}
		}
	}

	public static void main(String[] args) {

		// 创建系统
		final ActorSystem system = ActorSystem.create("helloakka");

		// 创建一个接待者
		final ActorRef greeter = system.actorOf(Props.create(Greeter.class), "greeter");

		// 创建一个收件箱
		final Inbox inbox = Inbox.create(system);

		// 告诉“接待者”改变“问候”的消息
		greeter.tell(new WhoToGreet("顾客"), greeter);

		// 问“接待员最新的“问候语”回复应该去的“actor-in-a-box”
		inbox.send(greeter, new Greet());

		// 等待5秒,与“问候”消息的答复
		Greeting greeting1 = (Greeting) inbox.receive(Duration.create(5, TimeUnit.SECONDS));

		System.out.println("问候: " + greeting1.message);

		// 改变问候,问一遍
		greeter.tell(new WhoToGreet("接待者"), ActorRef.noSender());
		inbox.send(greeter, new Greet());
		
		Greeting greeting2 = (Greeting) inbox.receive(Duration.create(5, TimeUnit.SECONDS));
		System.out.println("问候收到的问候语: " + greeting2.message);

		// 打印出问候信息
		ActorRef greetPrinter = system.actorOf(Props.create(GreetPrinter.class));
		//立刻执行(每秒一次)
		system.scheduler().schedule(Duration.Zero(), Duration.create(6, TimeUnit.SECONDS), greeter, new Greet(),
				system.dispatcher(), greetPrinter);
	}

	/**
	 * 问候打印机
	 */
	public static class GreetPrinter extends UntypedActor {
		public void onReceive(Object message) {
			if (message instanceof Greeting) {
				System.out.println("问候打印机:" + ((Greeting) message).message);
			}else{
				System.out.println("Other:"+message);
			}
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值