java使用redis阻塞队列,阻塞超时后,重新获取队列第一条丢失

我是用redis 的阻塞队列获取数据,因为设置redis连接超时是五分钟,所以阻塞五分钟后自动失去连接,我是使用捕获异常继续轮询阻塞,但是发现阻塞超时后,再一次的轮询会取不到队列的第一条数据,后面的都会正常获取到,不知道是为什么。

public static Callable<List<String>> myCallable01(String type,RedisTemplate redisTemplate){

        return new Callable<List<String>>(){
            @Override
            public List<String> call() throws Exception {
                List<String> list = new ArrayList<>();
                int a = 1;
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String listData = null;
                while (1==a)

                {

                    //从任务队列中获取一个任务,并将该任务放入暂存队列
                    try {
                    ListOperations redisList = redisTemplate.opsForList();

                    listData = redisList.leftPop("test:data", 0, TimeUnit.MILLISECONDS).toString();


                    } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("服务器超时,"+sdf.format(new Date()));
                        continue;
                    }

                    // 处理任务----纯属业务逻辑,模拟一下:睡觉
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                return list;
            }

        };
    }
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!