坐席排队功能

 需求:坐席排队  五秒之内没请求接口认为用户不在排队 从内存移除

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));

    

猜你喜欢

转载自www.cnblogs.com/xdcr/p/9258497.html