打通消息收发

消息收发核心流程

在我们发消息的时候,一条消息前面就会出现一个转圈圈的东西,此时将这个消息发送到了tcp层,然后tcp层再去投递到逻辑层,最终实现消息处理的还是逻辑层

当逻辑层处理完成之后,再投递到tcp层,最终tcp层将消息返回给sdk,app收到这条消息后,将那个圈圈去掉

Untitled

还有其他的情况,消息前有感叹号,也就是逻辑层判断了这条消息不能被发送,然后就要通过tcp层去告知sdk他不能被发送,sdk告诉app这条消息不能发送,就搞一个红色的感叹号

单聊消息分发逻辑

客户端连接的是Tcp层,无法做到一些消息的校验等逻辑工作,所以需要TCP层通过rabbitMQ向逻辑层传递信息。

// 这个注解就是消费者获取rabbitmq中的信息
    @RabbitListener(
            bindings = @QueueBinding(
                    value = @Queue(value = Constants.RabbitConstants.Im2MessageService, durable = "true"),
                    exchange = @Exchange(value = Constants.RabbitConstants.Im2MessageService, durable = "true")
            ),concurrency = "1"
    )
    public void onChatMessage(@Payload Message message, @Headers Map<String, Object> headers,
                              Channel channel) throws IOException {
        String msg = new String(message.getBody(), "utf-8");

Untitled

逻辑层做的工作:

  1. 校验用户信息
  2. 数据存储
  3. 回复ACK
  4. 转发消息(如果是多端同步,还需要进行消息的同步)

最后一步通过MQ在将消息投递的TCP层

聊天记录存储

Untitled