如何正确地使广播Actor能够动态添加/移除路由器?
问题背景: 一个Actor监听特定商品价格的变化, 然后将价格变化广播给所有其他的Actor(路由器),它们根据内部规则进行操作(例如如果价格为X则买入或卖出)。
我对Akka还很陌生,但是在阅读了文档之后,我相信我已经找出了所需的组件,但如果您认为我的设计或使用的组件不正确,请评论或回答。
我想从固定的路由器列表切换到可动态添加/移除路由器的方案。
ActorRef actor1 = system.actorOf(new Props(LimitOrderActor.class));
ActorRef actor2 = system.actorOf(new Props(LimitOrderActor.class));
ActorRef actor3 = system.actorOf(new Props(LimitOrderActor.class));
Iterable<ActorRef> routees = Arrays.asList(new ActorRef[] { actor1, actor2, actor3 });
ActorRef actorBroadcastRouter1 = system.actorOf(new Props(TickerWatcherActor.class).withRouter(BroadcastRouter.create(routees)), "router1");
将其转换为动态大小的BroadcastRouter,其中actor是在BroadcastRouter启动后创建的。
int lowerBound = 1;
int upperBound = 10000;
DefaultResizer resizer = new DefaultResizer(lowerBound, upperBound);
BroadcastRouter broadcastRouter2 = new BroadcastRouter(resizer);
ActorRef actorBroadcastRouter2 = system.actorOf(new Props(TickerWatcherActor.class).withRouter(broadcastRouter2), "router2");
ActorRef actor4 = system.actorOf(new Props(LimitOrderActor.class).withRouter((RouterConfig) broadcastRouter2));
ActorRef actor5 = system.actorOf(new Props(LimitOrderActor.class).withRouter((RouterConfig) broadcastRouter2));
ActorRef actor6 = system.actorOf(new Props(LimitOrderActor.class).withRouter((RouterConfig) broadcastRouter2));
目前,演员“actorBroadcastRouter2”正在接收消息,而不是预期的LimitOrderActor演员4、5和6。我做错了什么?
编辑:我相信现在我要寻找的是事件总线而不是广播路由器。
final ActorRef actor = system.actorOf(new Props(LimitOrderActor.class));
system.eventStream().subscribe(actor, String.class);