akka入门-事件总线

事件总线就是总线上有各种事件和不同订阅者,订阅者可以绑定不同的事件,总线上有事件接收到时会将消息发布到该消息的所有订阅者中。

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值