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);
}
}
}