消息机制
- 消息传递需要的角色: 消息生产者 -> 消息消费者
- 日常接触到的消息:电邮,APP推送,快递信息等
传统应用传递消息
弊端:
- 消息丢失: 不处理传递过程,消息的生产者和消费者都不管理消息传递的过程,不管消息是否传递成功
- 大量消息涌入
消息队列
- 消息消费者 (用户)
- ==消息队列 ↑==
- 应用服务 ↑
- 数据库 ↑
消息队列是一个中间件:介于 生产者和消费者之间,消息并不直接发出,而是通过消息队列发出。
消息队列存储消息:消息是存储在消息队列中,然后再有消息队列 来决定 先发和后发,是否被消费。
常见的消息队列模型
QUEUE 点对点 传输
一个消息对应一个消费者
TOPIC 发布/订阅传输
一个消息多个消费者
CMQ
Cloud Message Queue
简介
- 消息的可靠通信 ,在现阶段 分布式微服务系统开发中,CMQ能保证消息是异步发送的,无需各应用都在运行状态
- 安全可靠(保证消息不丢失):消息存储在CMQ中,由CMQ统一管理,保证了消息永不丢失且安全可靠
特点
应用场景
- 一对多生产 当生产生发送了消息,所有订阅该消息的消息消费者都能收到该消息。
-
异步通知 用户传递的消息并不是立即传递给了后端服务,而是存储在CMQ消息队列中,再由CMQ发送给后端服务,不需要后端服务时刻在线。
-
系统耦合 假设双11,库存系统不断的增删改而导致双方都崩溃,这个时候我们订单消息存入MQ,等待库存系统修复后,再把订单给库存系统处理。
-
削峰填谷 假设一个时间段内有大量请求进来,服务可能处理不过来,会产生404,500等错误, CMQ: 大量请求涌入CMQ存储,再由CMQ 分批次发送给服务器请求。 形成一个缓冲
-
可靠传递,多次复用 :比如我下一个单,需要 给订单,物流,积分模块各自发送消息,使用CMQ可以广播消息出去
-
CMQ事务消息 再分布式微服务中可以充当事务是否成功的标志信息
- 死信队列(无法被正常消息的信息,达到最大重试的信息),当一个消费经过最大尝试次数任然未被使用,表名消息的价值很低。但不能丢失消息,所以可以存入消息队列。
队列模型快速入门
- 进入腾讯云官网
- 进去CMQ 消息操作界面
- 新建队列并设置参数
- 队列名称 消息队列 标识 ,取名最好有意义
- 消息生命周期 消息在本队列最长的存活时间
- 消息接收长轮询等待时间:一个消息消费请求只会在取到有效消息或长轮询超时才返回响应
- 取出消息隐藏时长: 如果消息在设置的隐藏时间内没处理完,交给其他消费者
- 消息最大长度:限定允许发送到该队列的消息体的最大长度
- 堆积消息数量上限:最大消息堆积个数,可以理解为消息队列的总体容量
- 消息回溯:找回已消费删除的消息
- 发送消息
- 接收消息
主题模型快速入门
CMQ API