이벤트 서비스(이벤트)


이벤트 서비스는 이벤트 등록, 구독 및 브로드캐스트를 통해 이벤트 메시지 처리를 완료합니다. 목적은 코드 침입을 줄이고 모듈 간의 비즈니스 결합을 줄이는 것입니다. 이벤트 메시지는 대기열에 저장되고 다중 스레드 인터페이스 콜백은 메시지 및 구현에 사용됩니다. 메시지 컨텍스트 객체의 전송은 동기 및 비동기 처리 모드를 모두 지원합니다.

#-------------------------------------
# 框架事件初始化参数
#-------------------------------------

# 默认事件触发模式(不区分大小写),取值范围:NORMAL-同步执行,ASYNC-异步执行,默认为ASYNC
ymp.event.default_mode=

# 事件管理提供者接口实现,默认为net.ymate.platform.core.event.impl.DefaultEventProvider
ymp.event.provider_class=

# 事件线程池初始化大小,默认为Runtime.getRuntime().availableProcessors()
ymp.event.thread_pool_size=

# 事件配置扩展参数,xxx表示自定义参数名称,vvv表示参数值
ymp.event.params.xxx=vvv
YMP 핵심 이벤트 객체
ApplicationEvent: 프레임워크 이벤트
  • APPLICATION_INITED - 框架初始化
    APPLICATION_DESTROYED - 框架销毁

    ModuleEvent: 모듈 event
  • MODULE_INITED - 模块初始化
    MODULE_DESTROYED - 模块销毁

    Note
  • : 위의 내용은 YMP 프레임워크의 핵심에 포함된 이벤트 개체일 뿐입니다. 다른 모듈에 포함된 이벤트 개체에 대해서는 해당 항목에서 설명합니다. 문서화;

이벤트 구독

방법 1: 코드를 통해 수동으로 이벤트 구독 완료
  • public static void main(String[] args) throws Exception {
        YMP.get().init();
        try {
            // 订阅模块事件
            YMP.get().getEvents().registerListener(ModuleEvent.class, new IEventListener<ModuleEvent>() {
                @Override
                public boolean handle(ModuleEvent context) {
                    switch (context.getEventName()) {
                        case MODULE_INITED:
                            // 注意:这段代码是不会被执行的,因为在我们进行事件订阅时,模块的初始化动作已经完成
                            System.out.println("Inited :" + context.getSource().getName());
                            break;
                        case MODULE_DESTROYED:
                            System.out.println("Destroyed :" + context.getSource().getName());
                            break;
                    }
                    return false;
                }
            });
        } finally {
            YMP.get().destroy();
        }
    }

    방법 2: @EventRegister 주석 및 IEventRegister 인터페이스를 통해 이벤트 구독 구현
  • // 首先创建事件注册类,通过实现IEventRegister接口完成事件的订阅
    // 通过@EventRegister注解,该类将在YMP框架初始化时被自动加载
    @EventRegister
    public class DemoEventRegister implements IEventRegister {
        public void register(Events events) throws Exception {
            // 订阅模块事件
            events.registerListener(ModuleEvent.class, new IEventListener<ModuleEvent>() {
                @Override
                public boolean handle(ModuleEvent context) {
                    switch (context.getEventName()) {
                        case MODULE_INITED:
                            System.out.println("Inited :" + context.getSource().getName());
                            break;
                        case MODULE_DESTROYED:
                            System.out.println("Destroyed :" + context.getSource().getName());
                            break;
                    }
                    return false;
                }
            });
            //
            // ... 还可以添加更多的事件订阅代码
        }
    }
    
    // 框架启动测试
    public static void main(String[] args) throws Exception {
        YMP.get().init();
        try {
            // Do Nothing...
        } finally {
            YMP.get().destroy();
        }
    }

    @EventRegister注解和IEventRegister接口实现事件的订阅

    public class DemoEvent extends EventContext<Object, DemoEvent.EVENT> implements IEvent {
    
        public enum EVENT {
            CUSTOM_EVENT_ONE, CUSTOM_EVENT_TWO
        }
    
        public DemoEvent(Object owner, Class<? extends IEvent> eventClass, EVENT eventName) {
            super(owner, eventClass, eventName);
        }
    }
自定义事件

YMP的事件对象必须实现IEvent接口的同时需要继承EventContext对象,下面的代码就是一个自定义事件对象:

물론 @EventRegister 주석과 IEventRegister 인터페이스를 통해 맞춤 이벤트를 구독할 수도 있습니다. 🎜🎜🎜참고🎜: 이벤트가 트리거되면 구독(또는 청취)하세요. 이벤트 인터페이스가 콜백에 의해 실행되는 순서는 보장할 수 없습니다. 🎜🎜🎜🎜 사용자 정의 이벤트를 트리거합니다. 🎜🎜🎜rrreee🎜🎜🎜🎜🎜샘플 테스트 코드: 🎜🎜🎜rrreee🎜🎜🎜🎜🎜