websocket实现客服对话

操作

先用户发送消息,然后客服查看信息后进行回应。

思路

  • 以当前时间的秒为clientId。建立2个ConcurrentHashMap。分别存放用户和客服的连接信息
  • 用户发送信息当客服不在线,会存入一个集合当中。当有客服连入。会推送信息给在线客服。

测试地址

客户:http://localhost:9000/opinion/customer
客服:http://localhost:9000/opinion/server

问题

clientId需要保持一致性,建议用redis自增或者随机uuid。毕竟这个功能很少用

代码摘录

  • 控制层
@RequestMapping("/opinion")
@Controller
public class OpinionController {
   

    @Autowired
    private RabbitmqSend rabbitmqSend;

    @PostMapping("/push")
    @ResponseBody
    public String pushMessage(UserMessage userMessage) {
   
        rabbitmqSend.sendMessage(userMessage);
        return "ok";
    }

    @GetMapping("/customer")
    public String welcomeCustomer() {
   
        return "customer/index";
    }

    @GetMapping("/server")
    public String welcomeServer() {
   
        return "server/index";
    }

}
  • mq 接收和发送

    
    @Service
    public class RabbitmqReceive {
         
    
        private static Logger logger = LoggerFactory.getLogger(RabbitmqReceive.class);
    
        @RabbitListener(bindings = @QueueBinding(value = @Queue(value = "public_queue_message", autoDelete = "false"),
                exchange = @Exchange(value = "public_exchange_message", type = ExchangeTypes.FANOUT)))
        public void consumer(String message) {
         
            UserMessage userMessage = JSON.parseObject(message, UserMessage.class);
            //未建立连线
            if (Objects.isNull(userMessage.getToId())) {
         
               //存在在线用户
                if (CUSTOMER.equals(userMessage.getType()) && !serverSet.isEmpty()){
         
                    Random random = new Random();
                    Object[] keys = serverS
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值