akka学习教程(五) inbox消息收件箱
来源:互联网 发布:淘宝网民族风女套装 编辑:程序博客网 时间:2024/05/17 05:51
akka系列文章目录
- akka学习教程(十四) akka分布式实战
- akka学习教程(十三) akka分布式
- akka学习教程(十二) Spring与Akka的集成
- akka学习教程(十一) akka持久化
- akka学习教程(十) agent
- akka学习教程(九) STM软件事务内存
- akka学习教程(八) Actor中的Future-询问模式
- akka学习教程(七) 内置状态转换Procedure
- akka学习教程(六) 路由器Router
- akka学习教程(五) inbox消息收件箱
- akka学习教程(四) actor生命周期
- akka学习教程(三) 不可变对象
- akka学习教程(二)HelloWord
- akka学习教程(一)简介
我们知道,整个akka的actor系统是通过消息进行传递的,之前的几个教程都是通过一个actor来给另一个actor发消息。其实还可以使用inbox消息收件箱来给某个actor发消息,并且可以进行交互。
package akka;import akka.actor.*;import akka.event.Logging;import akka.event.LoggingAdapter;import com.typesafe.config.ConfigFactory;import scala.concurrent.duration.Duration;import java.util.concurrent.TimeUnit;import java.util.concurrent.TimeoutException;/** * Created by liubenlong on 2017/1/12. */public class InboxTest extends UntypedActor { private final LoggingAdapter log = Logging.getLogger(getContext().system(), this); public enum Msg{ WORKING, DONE, CLOSE; } @Override public void onReceive(Object o) throws Throwable { if(o == Msg.WORKING){ log.info("i am working."); }else if(o == Msg.DONE){ log.info("i am done"); }else if(o == Msg.CLOSE){ log.info("i am close."); getSender().tell(Msg.CLOSE, getSelf());//告诉消息发送者我要关闭了。 getContext().stop(getSelf());//关闭自己 }else{ unhandled(o); } } public static void main(String [] args){ ActorSystem system = ActorSystem.create("inbox", ConfigFactory.load("akka.conf")); ActorRef inboxTest = system.actorOf(Props.create(InboxTest.class), "InboxTest"); Inbox inbox = Inbox.create(system); inbox.watch(inboxTest);//监听一个actor //通过inbox来发送消息 inbox.send(inboxTest, Msg.WORKING); inbox.send(inboxTest, Msg.DONE); inbox.send(inboxTest, Msg.CLOSE); while(true){ try { Object receive = inbox.receive(Duration.create(1, TimeUnit.SECONDS)); if(receive == Msg.CLOSE){//收到的inbox的消息 System.out.println("inboxTextActor is closing"); }else if(receive instanceof Terminated){//中断 ,和线程一个概念 System.out.println("inboxTextActor is closed"); system.shutdown(); break; }else { System.out.println(receive); } } catch (TimeoutException e) { e.printStackTrace(); } } }}
输出结果:
[INFO] [01/12/2017 14:35:24.207] [inbox-akka.actor.default-dispatcher-2] [akka://inbox/user/InboxTest] i am working.[INFO] [01/12/2017 14:35:24.223] [inbox-akka.actor.default-dispatcher-2] [akka://inbox/user/InboxTest] i am done[INFO] [01/12/2017 14:35:24.223] [inbox-akka.actor.default-dispatcher-2] [akka://inbox/user/InboxTest] i am close.inboxTextActor is closinginboxTextActor is closed
参考资料
- 书籍《java高并发程序设计》
- AKKA官方文档
0 0
- akka学习教程(五) inbox消息收件箱
- 《Java高并发程序设计》学习 --7.6 消息收件箱(Inbox)
- Symbian (Read Inbox)解读收件箱
- Akka 【三】 Inbox
- 学习akka之消息
- akka学习教程(十一) akka持久化
- akka学习教程(十三) akka分布式
- akka学习教程(十四) akka分布式实战
- akka学习教程(一)简介
- akka学习教程(二)HelloWord
- akka学习教程(十) agent
- Outlook-收件箱修复工具Inbox Repair tool (Scanpst.exe)
- akka学习教程(十二) Spring与Akka的集成
- Akka学习笔记06--Actor的消息
- Akka学习笔记06--Actor的消息
- Akka学习笔记:Actor消息传递(1)
- Akka学习笔记:Actor消息传递(2)
- akka学习教程(三) 不可变对象
- Dom事件处理三阶段--捕获,命中,冒泡
- XML基础知识——XML文件对象增删改查(三)
- [笔记]《Linux内核设计与实现》第九、十章内核同步
- 一些实用的es6特性
- 从零开始学统计之归璐
- akka学习教程(五) inbox消息收件箱
- u-boot
- mysql插入用户账号问题
- AndroidStudio安全管理签名文件keystroe和签名密码(by 星空武哥)
- hybrid app初体验,和react-native一起飞
- depl
- web学习笔记08-Ionic的前后端简单交互与打包
- Java下简单用户名密码验证
- Java实现对cookie的增删改查