guava eventBus

文章介绍了在Java项目中使用Guava库,通过POM引入依赖。创建了包含枚举类型的BaseMessage和SchoolTaskMessage消息主题类,以及EventBusHandler事件主线处理组件,用于异步发布消息。同时,定义了SchoolTaskEventListener监听器来处理特定消息事件,特别是对于立即触发的任务进行定时调度的逻辑处理。
摘要由CSDN通过智能技术生成

1、引入pom

        <guava.version>23.0</guava.version>
            
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${guava.version}</version>
            </dependency>

2、创建消息主题类

public class BaseMessage {
}
@Getter
public enum SchoolTaskTouchTypeEnum {

    /**
     * 触发类型
     */
    IMMEDIATE_TRIGGER(0, "立即触发"),
    SCHEDULING_TRIGGER(1, "调度触发"),
    ;
    private final Integer code;

    private final String desc;

    SchoolTaskTouchTypeEnum(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }
}
@Data
public class SchoolEnterpriseTaskBO {

    private Long id;

    /**
     * 创建时间
     */
    private Date gmtCreate;

    /**
     * 修改时间
     */
    private Date gmtModified;

    /**
     * 任务类型
     *
     * @see com.cainiao.school.management.client.enums.SchoolTaskTypeEnum
     */
    private String taskType;

    /**
     * 任务执行所需的参数
     */
    private String taskParam;

    /**
     * 业务主键
     */
    private String outerId;

    /**
     * 触发类型0:立即出发1:调度触发
     *
     * @see com.cainiao.school.management.client.enums.SchoolTaskTouchTypeEnum
     */
    private Integer touchType;

    /**
     * 任务状态,0:待调用,1:执行完成
     *
     * @see com.cainiao.school.management.client.enums.SchoolTaskStatusEnum
     */
    private Integer taskStatus;

    /**
     * 任务是否删除,0:未删除,1:删除
     */
    private Integer isDelete;

    /**
     * 任务错误日志执行记录
     */
    private String exceptionLog;

    /**
     * 调度时间
     */
    private Date executeTime;

    /**
     * 版本
     */
    private Integer version;
}

创建消息题

/**
 * @author:李二林
 * @date:2023/3/15
 * @desc
 */
@Data
@AllArgsConstructor
public class SchoolTaskMessage extends BaseMessage{

    /**
     * 类型
     */
    private SchoolTaskTouchTypeEnum schoolTaskTouchTypeEnum;

    /**
     * bo
     */
    private SchoolEnterpriseTaskBO schoolEnterpriseTaskBO;
}

创建消息主线处理

@Component
public class EventBusHandler {

    @Autowired
    private final EventBusSupport eventBusSupport;

    public EventBusHandler(final EventBusSupport eventBusSupport){
        this.eventBusSupport = eventBusSupport;
    }

    public void eventPost(BaseMessage baseMessage){
        eventBusSupport.postAsync(baseMessage);
    }

}

消息监听处理

@Slf4j
@Component
public class SchoolTaskEventListener {

    @Resource
    private InvokeScheduleTaskProcessor invokeScheduleTaskProcessor;


    /**
     * 是否触发定时调度
     *
     * @param event
     */
    @Subscribe
    public void onMessageEvent(SchoolTaskMessage event) {
        try {
            SchoolTaskTouchTypeEnum schoolTaskTouchTypeEnum = event.getSchoolTaskTouchTypeEnum();
            if (Objects.equals(schoolTaskTouchTypeEnum.name(), SchoolTaskTouchTypeEnum.IMMEDIATE_TRIGGER.name())) {
                //手动触发 调度
                invokeScheduleTaskProcessor.process(null);
            }
        } catch (Exception e) {
            OakLog.of("SchoolTaskEventListener#onMessageEvent@Error").cause(e).error(log);
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值