coolliyong.github.io

消息机制

传统应用传递消息

弊端:

消息队列

消息队列是一个中间件:介于 生产者和消费者之间,消息并不直接发出,而是通过消息队列发出。

消息队列存储消息:消息是存储在消息队列中,然后再有消息队列 来决定 先发和后发,是否被消费。

常见的消息队列模型

QUEUE 点对点 传输

一个消息对应一个消费者

TOPIC 发布/订阅传输

一个消息多个消费者

CMQ

Cloud Message Queue

简介

特点

应用场景

  1. 一对多生产 当生产生发送了消息,所有订阅该消息的消息消费者都能收到该消息。
  2. 异步通知 用户传递的消息并不是立即传递给了后端服务,而是存储在CMQ消息队列中,再由CMQ发送给后端服务,不需要后端服务时刻在线。

  3. 系统耦合 假设双11,库存系统不断的增删改而导致双方都崩溃,这个时候我们订单消息存入MQ,等待库存系统修复后,再把订单给库存系统处理。

  4. 削峰填谷 假设一个时间段内有大量请求进来,服务可能处理不过来,会产生404,500等错误, CMQ: 大量请求涌入CMQ存储,再由CMQ 分批次发送给服务器请求。 形成一个缓冲

  5. 可靠传递,多次复用 :比如我下一个单,需要 给订单,物流,积分模块各自发送消息,使用CMQ可以广播消息出去

  6. CMQ事务消息 再分布式微服务中可以充当事务是否成功的标志信息

  7. 死信队列(无法被正常消息的信息,达到最大重试的信息),当一个消费经过最大尝试次数任然未被使用,表名消息的价值很低。但不能丢失消息,所以可以存入消息队列。

队列模型快速入门

  1. 进入腾讯云官网
  2. 进去CMQ 消息操作界面
  3. 新建队列并设置参数
    • 队列名称 消息队列 标识 ,取名最好有意义
    • 消息生命周期 消息在本队列最长的存活时间
    • 消息接收长轮询等待时间:一个消息消费请求只会在取到有效消息或长轮询超时才返回响应
    • 取出消息隐藏时长: 如果消息在设置的隐藏时间内没处理完,交给其他消费者
    • 消息最大长度:限定允许发送到该队列的消息体的最大长度
    • 堆积消息数量上限:最大消息堆积个数,可以理解为消息队列的总体容量
    • 消息回溯:找回已消费删除的消息
  4. 发送消息
  5. 接收消息

主题模型快速入门

CMQ API