需求:坐席排队 五秒之内没请求接口认为用户不在排队 从内存移除
redis用作消息队列
实现过程: 用户请求接口 查询redis中有没有预先排队的用户 如果有 查询坐席有没有空闲,坐席没有空闲 继续排队 内存中的用户请求时间刷新之当前时间,如果有分配坐席给用户,从队列中移除用户 如果没有排队用户直接取查询有没有空闲坐席,有分配给用户 没有继续排队。
添加一个定时任务类 每三百毫秒刷新一次 查询队列中有没有超时的用户 超时之后将其移除
比较麻烦的几点:
1)添加用户到队列中返回添加队列的值(这个是lpush返回的)然后吧当前的值 和用户请求过来的唯一id存到redis 中 以备 刷新时间用
long userindex = redisTemplate.opsForList().leftPush("GROUP_SEQUEUE_" + agent_group,JSONObject.toJSONString(map));
redisTemplate.opsForValue().set(uniqueid, String.valueOf(userindex));
2)刷新用户时间:取出队列的size 减去 第一步 存到redis中的值 然后修改队列中用户的时间
long size = redisTemplate.opsForList().size("GROUP_SEQUEUE_" + agent_group);
String index = redisTemplate.opsForValue().get(uniqueid);
long sub = size - Integer.parseInt(index);
redisTemplate.opsForList().set("GROUP_SEQUEUE_" + agent_group,sub, JSONObject.toJSONString(map));