`
176915785
  • 浏览: 34026 次
  • 性别: 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 ...

    Akka各种功能Demo、基本的helloworld、各种工具类与特殊消息、持久化、至

    Akka各种功能Demo、基本的helloworld、各种工具类与特殊消息、持久化、至少一次递送、定_AkkaExample

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

    在 "play-akka-hello-world" 项目中,我们能看到如何在 Play 应用中使用 Akka actors。通常,Play 会配置一个 ActorSystem,它是 Akka 的入口点,管理所有 Actor 的生命周期。然后,定义 Actor 类并实现其行为,这...

    Akka Java文档

    通常,Akka 的入门教程会以一个简单的 HelloWorld 示例开始。这个示例展示了如何创建 Actor、发送消息以及处理消息的基本流程。例如: ```java import akka.actor.ActorSystem; import akka.actor.AbstractActor; ...

    Akka Scala 学习高清原版pdf

    文档可能会提供入门示例,例如经典的Hello World程序,以便读者了解基本的设置和配置。 2. 术语和概念: - 介绍了Akka的基础概念,例如什么是actor?actor是Akka中处理消息的最小单元。 - actor系统是多个actors...

    AKKA (java) 精讲

    一个简单的 Akka Java HelloWorld 示例通常包括: 1. 定义一个 Actor 类,重写 `createReceive` 方法来接收消息。 2. 创建 Actor 实例。 3. 发送消息给 Actor 并接收响应。 ##### 1.5 Use-case and Deployment ...

    akka的教学

    为了快速理解 Akka 的基本工作原理,通常会从实现一个简单的“Hello World”示例开始。这个例子展示了如何定义 Actor 类、创建 Actor 系统、发送消息以及处理消息响应。 ##### 1.5 使用场景与部署方案 本节介绍了 ...

    akka java document

    在 Akka 的文档中,通常会提供一个简单的 HelloWorld 示例来展示如何创建 Actor 并发送消息。这个示例通常包括创建一个 Actor 类,定义处理消息的方法,然后启动 Actor 系统并创建 Actor 实例。 **1.5 使用场景与...

    akka2.0使用方法

    case "Hello" => println("World") case _ => println("Unknown message") } ``` 5. **Actor路径**:每个Actor都有一个唯一的路径,可以用来引用或发送消息给它。路径通常看起来像`/user/myActor`,其中`/user`...

    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 ...

    lagom-helloworld

    "lagom-helloworld" 项目是使用 Lagom 的 Java 版本模板 "lagom/lagom-java.g8" 创建的一个示例应用。这个模板为开发者提供了一个快速启动新 Lagom 项目的基础结构,包含必要的文件和配置,使得开发者可以专注于业务...

    akka-2.3.14.doc

    在Akka的学习过程中,“Hello World”示例通常是理解Actor模型的第一步。这个简单的示例演示了如何创建一个Actor、发送消息以及处理这些消息的基本流程。 **1.5 使用案例与部署场景** Akka适用于多种不同的应用...

    Akka Essentials & code

    这里`myActor`就是新创建的Actor,它会响应"Hello"消息并回传"World"。 4. **消息传递** 演员之间的通信通过发送和接收消息完成,这些消息可以是任何不可变类型。`sender()`引用用于返回发送消息的Actor,可以...

    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 Scala文档

    ##### 1.4 必不可少的 HelloWorld 示例 - **创建 Actor**:定义一个 Actor 类继承自 `Actor`。 - **发送消息**:使用 `tell` 方法向 Actor 发送消息。 - **接收消息**:在 Actor 内部定义处理逻辑。 - **启动 Actor*...

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

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

    akka-typed-example:以下博客文章中使用的Akka Typed快速示例

    override def receive: Receive = HelloWorld() } ``` 上述代码创建了一个简单的Actor,它只处理`Greet`消息并返回一个响应。 **项目结构** 在"akka-typed-example-master"这个项目中,你可能会找到以下文件和...

    面向Java开发者的Scala教程

    首先,注意到程序由一个名为`HelloWorld`的对象定义,这个对象包含一个名为`main`的方法。`main`方法接受一个字符串数组`args`作为参数,这是所有Scala应用程序的入口点,与Java类似。不过,与Java不同的是,`main`...

Global site tag (gtag.js) - Google Analytics