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
        }
    }
    
    
  • 相关阅读:
    bat windows批处理 移动所有子目录文件
    Oracle常见的QA
    [转载]行动起来
    [转载]微笑
    Excel数据更新至Mysql数据库
    sql server QA
    关于SharpZipLib的压缩与解压问题
    整合Spring.net到asp.net网站开发中初探
    设计模式概要
    Oracle 常用语句档案(二)
  • 原文地址:https://www.cnblogs.com/shoren/p/14343039.html
Copyright © 2011-2022 走看看