需求:任务下发后,在规定时间内必须处理,否则将从任务列表从新下发,再次下发。假设现有10个可处理任务,有下级单位领取任务,甲单位领取后,任务数10-1=9。但是超过规定时长未处理。则任务回归未下发状态、总结有两种实现方案,第二种参考之前网上学习过的一个订单超时未支付的解决方案,刚好解决本次需求。如果有类似场景,可以稍加调整套用,推荐第二种
1、定时任务轮询,规定时间内验证任务状态是否为已完成或已终止
2、采用redis ,key有效期回调事件实现
- 为每笔任务单绑定一个token,设置有限期为30分钟
key=aaaa-bbbb-cccc value=123456
对该key绑定过期事件回调,执行回调方法
Redis中配置开启过期回调监听
notify-keyspace-events "Ex"
springboot配置
@Configuration
public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
/**
* Redis失效事件 key
*
* @param message
* @param pattern
*/
@Override
public void onMessage(Message message, byte[] pattern) {
System.out.println(message.toString()+"失效"); //失效后业务逻辑
}
}