事件总线就是总线上有各种事件和不同订阅者,订阅者可以绑定不同的事件,总线上有事件接收到时会将消息发布到该消息的所有订阅者中。
3.测试类
1.编写事件发送Actor
import akka.actor.UntypedActor;
import akka.event.Logging;
import akka.event.LoggingAdapter;
import com.center.akka.simple.command.Command;
import com.center.akka.simple.event.Event;
public class Emitter extends UntypedActor {
LoggingAdapter log = Logging.getLogger(getContext().system(), this);
@Override
public void onReceive(Object msg ) {
if (msg instanceof Command) {
log.info("Emitting Event: " + msg);
String data = ((Command) msg).getData();
getContext().system().eventStream().publish( new Event(data));
}
}
}
2.事件处理器
import akka.actor.UntypedActor;
import akka.event.Logging;
import akka.event.LoggingAdapter;
public class Handler extends UntypedActor {
LoggingAdapter log = Logging.getLogger(getContext().system(), this);
@Override
public void onReceive(Object msg ) throws Exception {
log.info("Handled Event: " + msg);
}
}
3.测试类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import com.center.akka.event_bus.actor.Emitter;
import com.center.akka.event_bus.actor.Handler;
import com.center.akka.simple.command.Command;
import com.center.akka.simple.event.Event;
/**
*
* @author lcq
*
*/
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("event-system");
Thread.sleep(5000);
// 发射器
final ActorRef emitter = actorSystem.actorOf(Props.create(Emitter. class));
final ActorRef handler = actorSystem.actorOf(Props.create(Handler. class));
// 为handler订阅Event类型的事件
actorSystem.eventStream().subscribe( handler, Event.class);
for ( int i = 0; i < 10; i++) {
emitter.tell( new Command("CMD " + i ), null);
}
Thread.sleep(5000);
log.debug( "Actor System Shutdown Starting..." );
actorSystem.shutdown();
}
}
4.输出结果
[INFO] [05/17/2015 18:38:49.622] [event-system-akka.actor.default-dispatcher-3] [akka://event-system/user/$a] Emitting Event: Command{data='CMD 0'}
[INFO] [05/17/2015 18:38:49.623] [event-system-akka.actor.default-dispatcher-3] [akka://event-system/user/$a] Emitting Event: Command{data='CMD 1'}
[INFO] [05/17/2015 18:38:49.623] [event-system-akka.actor.default-dispatcher-3] [akka://event-system/user/$a] Emitting Event: Command{data='CMD 2'}
[INFO] [05/17/2015 18:38:49.623] [event-system-akka.actor.default-dispatcher-4] [akka://event-system/user/$b] Handled Event: Event{data='CMD 0', uuid='null'}
[INFO] [05/17/2015 18:38:49.623] [event-system-akka.actor.default-dispatcher-3] [akka://event-system/user/$a] Emitting Event: Command{data='CMD 3'}
[INFO] [05/17/2015 18:38:49.623] [event-system-akka.actor.default-dispatcher-4] [akka://event-system/user/$b] Handled Event: Event{data='CMD 1', uuid='null'}
[INFO] [05/17/2015 18:38:49.623] [event-system-akka.actor.default-dispatcher-3] [akka://event-system/user/$a] Emitting Event: Command{data='CMD 4'}
[INFO] [05/17/2015 18:38:49.623] [event-system-akka.actor.default-dispatcher-4] [akka://event-system/user/$b] Handled Event: Event{data='CMD 2', uuid='null'}
[INFO] [05/17/2015 18:38:49.623] [event-system-akka.actor.default-dispatcher-4] [akka://event-system/user/$b] Handled Event: Event{data='CMD 3', uuid='null'}
[INFO] [05/17/2015 18:38:49.623] [event-system-akka.actor.default-dispatcher-4] [akka://event-system/user/$b] Handled Event: Event{data='CMD 4', uuid='null'}
[INFO] [05/17/2015 18:38:49.623] [event-system-akka.actor.default-dispatcher-4] [akka://event-system/user/$a] Emitting Event: Command{data='CMD 5'}
[INFO] [05/17/2015 18:38:49.624] [event-system-akka.actor.default-dispatcher-3] [akka://event-system/user/$b] Handled Event: Event{data='CMD 5', uuid='null'}
[INFO] [05/17/2015 18:38:49.624] [event-system-akka.actor.default-dispatcher-4] [akka://event-system/user/$a] Emitting Event: Command{data='CMD 6'}
[INFO] [05/17/2015 18:38:49.624] [event-system-akka.actor.default-dispatcher-4] [akka://event-system/user/$a] Emitting Event: Command{data='CMD 7'}
[INFO] [05/17/2015 18:38:49.624] [event-system-akka.actor.default-dispatcher-5] [akka://event-system/user/$b] Handled Event: Event{data='CMD 6', uuid='null'}
[INFO] [05/17/2015 18:38:49.624] [event-system-akka.actor.default-dispatcher-5] [akka://event-system/user/$b] Handled Event: Event{data='CMD 7', uuid='null'}
[INFO] [05/17/2015 18:38:49.624] [event-system-akka.actor.default-dispatcher-4] [akka://event-system/user/$a] Emitting Event: Command{data='CMD 8'}
[INFO] [05/17/2015 18:38:49.624] [event-system-akka.actor.default-dispatcher-5] [akka://event-system/user/$b] Handled Event: Event{data='CMD 8', uuid='null'}
[INFO] [05/17/2015 18:38:49.624] [event-system-akka.actor.default-dispatcher-4] [akka://event-system/user/$a] Emitting Event: Command{data='CMD 9'}
[INFO] [05/17/2015 18:38:49.624] [event-system-akka.actor.default-dispatcher-5] [akka://event-system/user/$b] Handled Event: Event{data='CMD 9', uuid='null'}
18:38:54.625 [main] DEBUG com.center.akka.event_bus.app.System - Actor System Shutdown Starting...