zoukankan      html  css  js  c++  java
  • AsyncEventBus code example

    EventCenter

    封装AsyncEventBus,对外有register 和 post 方法。

    @Service
    public class EventCenter {
        private static final Logger LOG = LoggerFactory.getLogger(EventCenter.class);
    
        private static AsyncEventBus INSTANCE;
        private static ThreadPoolExecutor EXECUTOR;
    
        @PostConstruct
        private void init() {
            //default new ThreadPoolExecutor.AbortPolicy()
            this.EXECUTOR = new ThreadPoolExecutor(10, 50, 5, TimeUnit.SECONDS,
                    new LinkedBlockingQueue<>(1000));
    
            this.INSTANCE = new AsyncEventBus(EXECUTOR, new SubscriberExceptionHandler() {
                @Override
                public void handleException(Throwable exception, SubscriberExceptionContext context) {
                    LOG.error("consume event exception : [subscribeMethod={}, event={} ]",context.getSubscriberMethod(), context.getEvent().toString(),exception);
                }
            });
        }
    
        private AsyncEventBus getInstance() {
            if(INSTANCE == null) {
                init();
            }
            return INSTANCE;
        }
    
        public void register(Object obj) {
            LOG.info("register listener {}", obj.getClass().getSimpleName());
            getInstance().register(obj);
        }
    
        public void post(Object event){
            LOG.info("post event {}", event.toString());
            getInstance().post(event);
        }
    }
    

    Listener

    AbstractEventListener 为所有listener基类,init中注册到EventBus.
    BizEventListener为业务类,消费EventBus发出的消息。

    @Service
    public abstract class EventListener {
    
        @Autowired
        private EventCenter eventCenter;
    
        @PostConstruct
        public void init() {
            eventCenter.register(this);
        }
    }
    
    
    @Service
    public class BizEventListener extends AbstractEventListener{
    
        @AllowConcurrentEvents
        @Subscribe
        public void consumeTaskEvent(Event event) {
            //business code
        }
    }
    
    
  • 相关阅读:
    Redis数据类型及操作详解
    【Linux】——搭建redis
    【Linux】——搭建nexus
    更多体会,更多收获!(2015年终总结)
    【WebService】——入门实例
    HashSet如何判定两个元素相同
    WEB-INF目录
    Java基础——集合
    从零开始配置Jenkins(三)——用户权限管理
    Activiti工作流(三)——流程变量
  • 原文地址:https://www.cnblogs.com/shoren/p/14343039.html
Copyright © 2011-2022 走看看