操作
先用户发送消息,然后客服查看信息后进行回应。
思路
- 以当前时间的秒为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