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
        }
    }
    
    
  • 相关阅读:
    收集 关于php的博文
    hdwiki中插件开发指南
    MySQL中“”的坑
    SpringBoot生成验证码
    Spring中的循环依赖问题
    深入理解AQS(抽象队列同步器)
    JUC下线程的三种等待唤醒机制
    关于List集合的去重
    MySQL:去除 字符串
    MySQL:Can't connect to MySQL server on 'localhost'(10061)
  • 原文地址:https://www.cnblogs.com/shoren/p/14343039.html
Copyright © 2011-2022 走看看