akka入门-调用子Actor处理消息
2015-05-17 21:21
316 查看
程序演示了父子结构的Actor处理消息。父Actor接收到消息后调用子Actor处理。
1.创建父子Actor
2.测试类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.center.akka.parent_child.actor.ParentActor;
import com.center.akka.simple.command.Command;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
public class System {
public static final Logger log = LoggerFactory.getLogger(System.class);
public static void main(String... args) throws Exception {
final ActorSystem actorSystem = ActorSystem.create("actor-system");
Thread. sleep(5000);
final ActorRef actorRef = actorSystem.actorOf(Props.create(ParentActor. class), "parent-actor");
actorRef.tell( new Command("CMD 1" ), null);
actorRef.tell( new Command("CMD 2" ), null);
actorRef.tell( new Command("CMD 3" ), null);
actorRef.tell( "echo", null );
actorRef.tell( new Command("CMD 4" ), null);
actorRef.tell( new Command("CMD 5" ), null);
Thread. sleep(5000);
log.debug("Actor System Shutdown Starting..." );
actorSystem.shutdown();
}
}
3.结果输出
[INFO] [05/17/2015 17:52:05.981] [actor-system-akka.actor.default-dispatcher-4] [akka://actor-system/user/parent-actor/child-actor] Starting
[INFO] [05/17/2015 17:52:05.981] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/parent-actor] Received Command: Command{data='CMD 1'}
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/parent-actor] Received Command: Command{data='CMD 2'}
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-2] [akka://actor-system/user/parent-actor/child-actor] Received Event: Event{data='CMD 1', uuid='3423af06-f96c-430b-ad3a-6d16d86b3d91'}
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/parent-actor] Received Command: Command{data='CMD 3'}
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-2] [akka://actor-system/user/parent-actor/child-actor] Received Event: Event{data='CMD 2', uuid='93061123-91ef-445f-8f99-29b558d84947'}
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/parent-actor] Received Command: echo
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-2] [akka://actor-system/user/parent-actor/child-actor] Received Event: Event{data='CMD 3', uuid='35203fc0-f1cc-4d8c-bab2-75e77f515c03'}
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/parent-actor] ECHO!
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/parent-actor] Received Command: Command{data='CMD 4'}
[INFO] [05/17/2015 17:52:06.036] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/parent-actor] Received Command: Command{data='CMD 5'}
[INFO] [05/17/2015 17:52:06.036] [actor-system-akka.actor.default-dispatcher-2] [akka://actor-system/user/parent-actor/child-actor] Received Event: Event{data='CMD 4', uuid='5df543a6-7290-43f6-ad85-74ea341e999b'}
[INFO] [05/17/2015 17:52:06.036] [actor-system-akka.actor.default-dispatcher-2] [akka://actor-system/user/parent-actor/child-actor] Received Event: Event{data='CMD 5', uuid='da49b323-59ba-49c5-96d5-707cbe5a4b9b'}
17:52:10.981 [main] DEBUG c.c.akka.parent_child.app.System - Actor System Shutdown Starting...
1.创建父子Actor
import java.util.UUID; import com.center.akka.simple.command.Command; import com.center.akka.simple.event.Event; import akka.actor.ActorRef; import akka.actor.Props; import akka.actor.UntypedActor; import akka.event.Logging; import akka.event.LoggingAdapter; public class ParentActor extends UntypedActor { LoggingAdapter log = Logging.getLogger(getContext().system(), this); private final ActorRef childActor ; public ParentActor() { childActor = getContext().actorOf(Props.create(ChildActor. class), "child-actor"); } @Override public void onReceive(Object msg ) throws Exception { log.info( "Received Command: " + msg ); if (msg instanceof Command) { final String data = ((Command) msg).getData(); final Event event = new Event(data, UUID.randomUUID().toString()); childActor.tell(event , getSelf()); } else if (msg .equals("echo" )) { log.info( "ECHO!"); } } } import akka.actor.UntypedActor; import akka.event.Logging; import akka.event.LoggingAdapter; public class ChildActor extends UntypedActor { LoggingAdapter log = Logging.getLogger(getContext().system(), this); @Override public void preStart() { log.info( "Starting"); } @Override public void onReceive(Object msg ) { log.info( "Received Event: " + msg ); } }
2.测试类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.center.akka.parent_child.actor.ParentActor;
import com.center.akka.simple.command.Command;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
public class System {
public static final Logger log = LoggerFactory.getLogger(System.class);
public static void main(String... args) throws Exception {
final ActorSystem actorSystem = ActorSystem.create("actor-system");
Thread. sleep(5000);
final ActorRef actorRef = actorSystem.actorOf(Props.create(ParentActor. class), "parent-actor");
actorRef.tell( new Command("CMD 1" ), null);
actorRef.tell( new Command("CMD 2" ), null);
actorRef.tell( new Command("CMD 3" ), null);
actorRef.tell( "echo", null );
actorRef.tell( new Command("CMD 4" ), null);
actorRef.tell( new Command("CMD 5" ), null);
Thread. sleep(5000);
log.debug("Actor System Shutdown Starting..." );
actorSystem.shutdown();
}
}
3.结果输出
[INFO] [05/17/2015 17:52:05.981] [actor-system-akka.actor.default-dispatcher-4] [akka://actor-system/user/parent-actor/child-actor] Starting
[INFO] [05/17/2015 17:52:05.981] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/parent-actor] Received Command: Command{data='CMD 1'}
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/parent-actor] Received Command: Command{data='CMD 2'}
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-2] [akka://actor-system/user/parent-actor/child-actor] Received Event: Event{data='CMD 1', uuid='3423af06-f96c-430b-ad3a-6d16d86b3d91'}
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/parent-actor] Received Command: Command{data='CMD 3'}
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-2] [akka://actor-system/user/parent-actor/child-actor] Received Event: Event{data='CMD 2', uuid='93061123-91ef-445f-8f99-29b558d84947'}
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/parent-actor] Received Command: echo
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-2] [akka://actor-system/user/parent-actor/child-actor] Received Event: Event{data='CMD 3', uuid='35203fc0-f1cc-4d8c-bab2-75e77f515c03'}
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/parent-actor] ECHO!
[INFO] [05/17/2015 17:52:06.035] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/parent-actor] Received Command: Command{data='CMD 4'}
[INFO] [05/17/2015 17:52:06.036] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/parent-actor] Received Command: Command{data='CMD 5'}
[INFO] [05/17/2015 17:52:06.036] [actor-system-akka.actor.default-dispatcher-2] [akka://actor-system/user/parent-actor/child-actor] Received Event: Event{data='CMD 4', uuid='5df543a6-7290-43f6-ad85-74ea341e999b'}
[INFO] [05/17/2015 17:52:06.036] [actor-system-akka.actor.default-dispatcher-2] [akka://actor-system/user/parent-actor/child-actor] Received Event: Event{data='CMD 5', uuid='da49b323-59ba-49c5-96d5-707cbe5a4b9b'}
17:52:10.981 [main] DEBUG c.c.akka.parent_child.app.System - Actor System Shutdown Starting...
相关文章推荐
- TWinControl.DefaultHandler里的CallWindowProc(FDefWndProc)还挺有深意的,TButton对WM_PAINT消息的处理就是靠它来处理的(以前不明白为什么总是要调用inherited,其实就是没有明白TWinControl.DefaultHandler的真正用处,而且还很有用)
- Akka学习笔记:Actor消息处理-请求和响应(2)
- VS2010/MFC编程入门之八(对话框:为控件添加消息处理函数)
- MFC编程入门之九(对话框:为控件添加消息处理函数)
- (转载)VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)
- MFC应用程序消息处理及其窗口创建和销毁过程函数调用顺序
- MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序
- akka入门-基于信道进行消息可靠传输
- 不调用与 PostThreadMessage() PRB: MFC 消息处理程序
- MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序
- Floodlight 入门 之 起步篇 - 如何处理PacketIN消息
- MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序
- MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序
- Lua消息处理入门
- 调用SendMessage后,开始处理传递过去的窗口过程消息,之后返回到SendMessage语句调用之后的下一条语句
- MFC应用程序消息处理及其窗口创建和销毁过程函数调用顺序
- Storm入门教程:消息的可靠处理
- 消息处理(异步调用OneWay, 双向通讯Duplex)
- Android入门之WmS中处理消息的时机