2021-08-10 更新
之前的用法需要在每次发布后都执行一次任务,也没有非常方便;所以在下文的基础上又进行了一次改进,达到一次启动,“终生启动”的效果。
1. 升级QueueConsumerStarterJob
@Component
@Slf4j
public class QueueConsumerStarterJob {
@Autowired
private RabbitListenerEndpointRegistry rabbitListenerEndpointRegistry;
private boolean isStarted = false;
@XxlJob("AmqpConsumerJobHandler")
public void amqpConsumerJobHandler() throws Exception {
if (!isStarted) {
synchronized (this) {
if (!isStarted) {
log.info("开始amqp消费启动队列");
rabbitListenerEndpointRegistry.start();
isStarted = true;
} else {
log.debug("消费已启动,不重复启");
}
}
} else {
log.debug("消费已启动,不重复启");
}
}
public void setStarted(boolean started) {
isStarted = started;
}
}
可以看到在之前的基础上添加了一个启动标识isStarted
,可以推测出amqpConsumerJobHandler
会被多次调用。
2. 更新xxl-job配置
2.1 执行器管理
将注册方式变更为手动,然后只保留队列机的机器地址(可能是多个);
2.2 任务管理
将任务的调度类型设置为