需求:任务下发后,在规定时间内必须处理,否则将从任务列表从新下发,再次下发。假设现有10个可处理任务,有下级单位领取任务,甲单位领取后,任务数10-1=9。但是超过规定时长未处理。则任务回归未下发状态、总结有两种实现方案,第二种参考之前网上学习过的一个订单超时未支付的解决方案,刚好解决本次需求。如果有类似场景,可以稍加调整套用,推荐第二种

1、定时任务轮询,规定时间内验证任务状态是否为已完成或已终止

2、采用redis ,key有效期回调事件实现

  1. 为每笔任务单绑定一个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()+"失效");                    //失效后业务逻辑
    }
}