`
176915785
  • 浏览: 33149 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Akka的Hello world

 
阅读更多
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
分享到:
评论

相关推荐

    akka-http-api-helloworld:Akka HTTP最小JSON RequestResponse示例

    Akka-HTTP Hello World Akka-http的最小示例安装并运行$ ##### Tutorial Install/Run #####$ git clone https://github.com/allenhwkim/akka-http-helloworld.git$ cd akka-http-helloworld$ sbt compile run$ curl ...

    play-akka-hello-world:展示 Akka 演员的基本 Play 框架项目

    play-akka-hello-world 演示 Akka actor 用法的简单项目。

    Akka​ 的 .NET 开源实现 Akka.NET.zip

     Console.WriteLine("Hello {0}", greet.Who));  }  }  class Program  {  static void Main(string[] args)  {  //create a new actor system (a container for your actors)  var ...

    Akka-doc-zh:Akka 官方文档中文

    必需的 “Hello World” 使用案例和部署场景 Akka使用实例 概述 术语,概念 Actor系统 什么是Actor? 监管与监控 Actor引用,路径与地址 位置透明性 Akka与Java内存模型 消息传递可靠性 配置 Actors ...

    akka-grpc-quickstart-scala.g8:使用Scala构建的Akka gRPC的最小种子模板

    使用Scala的Akka gRPC快速入门快速入门指南《的介绍了此示例Hello World示例说明了Akka gRPC的基础知识。 在30分钟内,您应该能够下载并运行示例,并使用本指南来了解示例的构造方式。Giter8模板它也可以用作带有...

    clickcounter-android-akka

    学习目标 此示例旨在作为任何计划使用 Scala 和开发基于 actor 的Android 应用程序的起点。 其学习目标是: 使用 Scala 开发 Android ...Akka 演员 hello world 示例 James Earl Douglas 的 SBTB 2014 演讲 James Earl

    akka-quickstart-java.g8:Java Akka的最小种子模板

    Java Akka快速入门快速入门指南《的介绍了此示例Hello World示例说明了Akka的基础知识。 在30分钟内,您应该能够下载并运行示例,并使用本指南来了解示例的构造方式。 这将使您的脚湿透,并希望激发您更深入地探索...

    akka-web-template:一个基于 sbt 的 scala Akka 项目,它设置了一个支持 REST 和 Comet 的 web 项目

    它包括一个简单的 hello-world 风格的演示应用程序和一个 actor 引导类。 它的灵感来自 efleming969 的 。 然而,它的不同之处在于它使用 sbt 依赖项而不是设置 maven 存储库使用 sbt 0.12.x 和 xsbt-web-plugin ...

    java8集合源码分析-akka-comparison:阿卡比较

    com.oracle.sec2.thread_objects.HelloAkka 如java线程不同,akka执行完成后是不会自动退出的,需要手动杀进程,一般我们也不需要自动退出【TODO 自动退出程序?】 #####使用Sleep方法暂停一个线程 任务:每四秒打印...

    Akkling:用于Akka.NET的实验性F#类型API

    强制性的hello world示例: open Akkling use system = System.create " my-system " <| Configuration.defaultConfig () let aref = spawnAnonymous system <| props ( actorOf ( fun m -> printfn " %s " ...

    helloworld:你好大数据。 包括 hadoop echosystem 演示。 和中间件演示

    Hadoop EchoSystem 演示: avro 级联 cassandra 紧缩 flink 水槽 giraph hadoop mahout tez zookeeper 中间件演示: kafka 弹性搜索 netty akka NoSQL 演示: mongodb neo4j redis riak 泰坦风暴与火花: 和来自官方...

    reactive-streams-examples:React流示例

    这是一个“ Hello World”流示例(嗯,这次不是Hello World,而是处理一个非常简单的有界流)。 它显示了Akka流的基本概念:“源”,“接收器”和“物化器”。 ReactiveStreamsAkkaWithBuffer 这显示了背压和缓冲...

    AkkaRemoteActorsHelloWorld:一个简单的“世界,你好”示例,展示了如何将远程角色与Akka一起使用

    Akka远程“ Hello,世界”示例顾名思义,这是Akka远程演员的一个简单的“ Hello,world”示例。 它显示了如何创建本地角色,远程角色以及如何在它们之间发送消息。假设条件就此代码而言,我假设您了解以下内容: ...

    cchat:使用 akka io 与广播服务器进行某种聊天的简单示例

    聊天 使用 akka io 与广播服务器...当每个客户端启动时,您将看到随机生成的客户端 ID(例如Connecting to localhost/127.0.0.1:5555 with id 559 )并使用它以id message的形式id message (例如559 hello world )。

    实战Java高并发程序设计(第2版)PPT模板.pptx

    7使用akka构建高并发程序 7.1新并发模型:actor 7.2akka之helloworld 7.3有关消息投递的一些说明 7.6选择actor 7.5监督策略 7.4actor的生命周期 01 02 03 04 05 06 实战Java高并发程序设计(第2版)PPT模板全文共25...

    proyectoCLOUDMIMO

    播放Java的Hello World Web教程 要遵循本教程中的步骤,您将需要正确版本的Java和构建工具。 您可以使用任何Java构建工具来构建Play项目。 由于sbt利用了诸如自动重新加载之类的Play功能,因此本教程介绍了如何使用...

    RWS-web-DD-OPER

    播放Java的Hello World Web教程 要遵循本教程中的步骤,您将需要正确版本的Java和构建工具。 您可以使用任何Java构建工具来构建Play项目。 由于sbt利用了诸如自动重新加载之类的Play功能,因此本教程介绍了如何使用...

    polybody-macro-calc

    播放Scala的Hello World Web教程要遵循本教程中的步骤,您将需要正确版本的Java和sbt。 该模板要求: Java软件开发人员工具包(SE)1.8或更高版本sbt 1.3.4或更高版本。 注意:如果您从以zip文件的形式下载了该项目...

    桑格利亚汽酒:Scala GraphQL实现

    是一阶库。 SBT配置: libraryDependencies + = " org.sangria-graphql " %% " sangria " % " <latest> " 您可以在此处找到使用akka-http和桑... 最简单的Hello World应用程序可能如下所示: import sangria . sche

Global site tag (gtag.js) - Google Analytics