场景一:xxl-job 报警
- 方法调用入口:
- 接口:
- 具体报警规则实现类:
以上类的简要功能是 xxljob中失败任务报警处理机制
贴出总结:
- 在 JobAlarmer 类中容器初始化时从 spring 上下文中获取 JobAlarm 类的对象 list:jobAlarmList,(主要代码:
applicationContext.getBeansOfType(JobAlarm.class);
) - alarm方法中遍历 jobAlarmList 调用重写的 doAlarm 方法(报警具体实现),当需要触发报警时,只需要调用 JobAlarmer 类的 alarm 方法,即可自动触发所有的报警实现,因xxl默认只有邮箱报警,所本文代码只贴出了邮箱报警 EmailJobAlarm 类的代码
- 此方式的好处是当需要其他报警方式:如短信报警,只需要添加类实现 JobAlarm 接口,使用
@Component
注解,并重写方法**doAlarm**
即可,便会在 JobAlarm 类的 alarm 方法 jobAlarmList 中触发调用子类实现的短信报警方法 -
场景二:监听 binlog 日志多队列消费时
```java @Slf4j @Service @DependsOn(“springContextHolder”) public class ReceiveBinlogMessageService implements IReceiveBinlogMessage, InitializingBean { private int coreThreadNum = 20; private ExecutorService pool = Executors.newFixedThreadPool(coreThreadNum); private Map
instances = null; // … public boolean receive(Message message) throws Exception { final Collection<IConsumerService> consumerServices = instances.values();
// 循环遍历实现类进行异步消费
for (IConsumerService consumerService : consumerServices) {
AsyncSendMessageTask sendMessageTask = new AsyncSendMessageTask(consumerService, tableDatas, multiTaskProgress, failTaskCount);
pool.execute(sendMessageTask);
}
}
} // 从上下文中获取实现了此消费接口的实现类 @Override public void afterPropertiesSet() throws Exception { this.instances = SpringContextHolder.getApplicationContext().getBeansOfType(IConsumerService.class); }
消费接口:
```java
/**
* 消息发送service
*/
public interface IConsumerService {
/**
* 发送消息接口
*
* @param tableDatas 数据集
* @return 消息发送返回状态
* @throws Exception
*/
public boolean sendMessageData(final List<TableData> tableDatas) throws Exception;
}
对应两个实现类