RabbitMQ

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
组件实现功能点
支持消息高性能的序列化转换, 异步化发送消息
支持消息生产实例消费实例的连 接处化、缓存化,提高性能
支持可靠性投递消息,保证 100%不丢失
支持消费端的幂等操作,保证消 费端不会重复消费
支持迅速消息发送模式,比如一 些日志收集,统计分析,需要提 高吞吐量,保证高性能
支持消息延迟发送模式,消息可 以延迟发送,指定延迟时间,比 如用于延迟检查,服务限流场景
RabbitMQ
演讲人
2 0 2 5 - 11 - 11
简介
简介
01
介绍
03
RabbitMQ优点
02
MQ优点
04
基本结构
简介
介绍
MQ全称为Message Queue,即消息队列, RabbitMQ是由erlang语 言开发,基于AMQP(Advanced MessageQueue 高级消息队列协议) 协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分 布式系统开发中应用非常广泛。RabbitMQ官方地址: http://www.rabbitmq.com/
死信队列(dlx)
解释
死信队列(dlx) 定义:当一个消息在一个队列中变成死信(dead message)后,它会重新publish到一个exchange
消息变成死信的几种情况
上,这个exchange就是dlx
1、被拒绝的消息 (basic.reject\\basic.nack ),并且requeue = false
简介
MQ优点
1、任务异步处理。将不需要同步处理的并且耗时长的操作由消息队列通 知消息接收方进行异步处理。提高了应用程序的响应时间。2、应用程序 解耦合MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程 序进行解耦合。
简介
RabbitMQ优点
1、使得简单,功能强大。2、基于AMQP协议。3、社区活跃,文档完善。4、高并发性能好, 这主要得益于Erlang语言。5、Spring Boot默认已集成RabbitMQ
工作模式
Routing(路由模式)
分支主题
Routing模式和 Publish/subscibe有啥 区别?Routing模式要 求队列在绑定交换机时 要指定routingkey,消 息会转发到符合 routingkey的队列。
工作模式
Topics(通配符模式)
分支主题 01
队列绑定交换机指定通配符:统配符规 02 则 : 中 间 以 “ . ”分 隔。 符号 #可 以匹 配
2、发送消息,等待rabbitmq应答
3、异步监听rabbitmq应答,如果返回true,即消息投递成功,将消息
分支主题
1)work queues不用定义交换机, 而publish/subscribe需要定义交换 机。2)publish/subscribe的生产方 是面向交换机发送消息,work queues的生产方是面向队列发送消息 (底层使用默认交换机)。3) publish/subscribe需要设置队列和 交换机的绑定,work queues不需要 设置,实质上work queues会将队列 绑定到默认的交换机 。相同点:所以 两者实现的发布/订阅的效果是一样的, 多个消费端监听同一个队列不会重复消 费消息。
消息确认
01
消息发 送
02
消息接 收
消息确认
消息发送
01
事物模 式
02
消息异 步确认
模式
消息发送
事物模式
消息异步确认模式
confirm消息确认
消息确认是指:生产者投递消息后,如果broker接收到消息后,会给生
产者一个应答
接收消息成功,返回true
接收消息失败,返回false
如果无应答,可能与
TTL消息\\队 列
TTL消息\\ 队列
消息过期 & 队列过 期
01
消息过期时间: 在发送消息的时 候可以指定,只 对当前消息有效
02
队列过期时间: 发送到该队列的 消息都有过期时 间
可靠消息投递 解决方案
消息落库, 对消息进行 打标
架构图
分支主题
步骤
1、业务数据、消息数据分别入库,标记消息发送中、记录消息落库时 间
消息异步确认模式
return消息机制
关键配置项:Mandatory 如果为true:监听会接收到路由不可达的消 息,进行后续处理; 如果为false:broker端会自动删除该消息
消息异步确认模式
return消息机制
代码实现见springboot整合章节
消息确认
消息接收
03
消费端ack与重回队
03 方法参数
1、prefetchSize: 单个消息 大小限制,一般为0 2、prefetchCount:告诉 rabbitmq不要给一个消费者一 次推送超过N条消息,直到消 费者主动ack 3、global: true\\false是否 将上述设置应用于channel, 即上面的设置是通道级别还是 消费之级别,一般为false
4、Exchange将消息转发 到指定的Queue(队列)
消息发布接收流程
接收消息
1、消费者和
Broker建立TCP连
1

5、消费者接收到消 息。
5
4、当有消息到达
Queue时Broker默认
4
将消息推送给消费者。
2
2、消费者和 Broker建立通道
3
3、消费者监听指定 的Queue(队列)
消息确认
消费端限流
消费端限流
01 解释
RabbitMQ提供了qos(服务 质量保证)功能:在非自动消 息确认的前提下,如果一定数 目的消息未被消费前,不会进 行消费新的消息
02 方法
方法:void basicQos(int prefetchSize, int prefetchCount, boolean global)
说明:dlx就是一个普通的exchange,他能在任何 queue上被指定,实际就是在这个queue上设置属性 当这个queue上有死信时,rabbitmq会自动将这个
2、消息TTL过期 3、队列达到最大长度
死信重新发布到定义的exchange上(dlx),进而被
路由到一个队列上
业务可以监听这个队列的消
消息异步确认模式
return消息机制
application配置:rabbitmq.publisher-returns: true #开启消息回
调监听器
rabbitmq.template.mandatory: true
消息异步确认模式
return消息机制
return listener: 用于处理那些无法路由的消息
非核心消息, 如日志收集、
性能统计
01
发 送 消 息 不 03 需要
confirm确 认
02 消息不需要
落库
支持消息延迟发送模式,消息可以延迟发 送,指定延迟时间,比如用于延迟检查, 服务限流场景
业务场景
商品签收,七天之后自动付款
优惠券指定日期作废
实现
封装Message的时候指定delayTime 属性
息,做一些处理
死信队列(dlx)
实现死信队列
设置一个死信队列:Exchange:
dlx.exchange
Queue:
dlx.queue
Routin gKey :
#
设置正常队列添加参数属性: a r g u m e n t s . p u t ( & q u o t ; x - d e a d - l e t t e rexchange","dlx.exchange&quo t;)这时这个正常队列里的死信将会被重新 publish到dlx.exchange交换机上
MQ组件&架构设计
组件实现功能点
0 1 支持事物消息 0 2 支持顺序消息,保证消息送达消费端
的前后顺序
0 3 支持消息补偿、重试,以及快速定位 失败消息\\异常
0 4 支持消息集群的负载均衡 0 5 支持消息路由策略,保证正确路由到
指定机器
0 6 支持批量发送消息
支持迅速消息发送模式,比如一些日志收集,统计分析,需要提高吞吐量,保证高性能
第二个参数:是否批量
第三个参数:true 表示消息重新投递,消费者还会
重新接收到该消息
false 表示消息在
rabbitmq服务器中删除,消费者不会接收到该消息
basicAck
channel.basicAck(message.getMessageProper ties().getDeliver yTag(), false); 此方法:告诉服务器收到这条消息,已经被我消费了, 可以在队列删掉这样以后就不会再发了,否则消息服 务器以为这条消息没处理掉,后续还会重发 第二个参数:是否批量 第一个参数:消息id
02 代码实现见与springboot整合章 节
消费端ack与重回队列(配合手动确认消息 使用)
basicNack
channel.basicNack(message.getMessagePrope rties().getDeliver yTag(), false, true);
第一个参数:消息id
3
Routing(路由模式)
4
To pi cs (通配符模式)
工作模式
Work queues(工作队 列)
01 分支主题
02
1、一条消息只会 被一个消费者接收; 2、rabbit采用轮 询的方式将消息是 平均发送给消费者 的;3、消费者在 处理完某条消息后, 才会收到下一条消 息。
工作模式
Publish/Subscribe(发布订 阅)
简介
基本结构
Broker:消息队列服务进程,此进程包括两个部分: Exchange和Queue
Exchange:消息队列交换机,按一定的规则将消息路由转 发到某个队列,对消息进行过虑。
Queue:消息队列,存储消息的队列,消息到达队列并转 发给指定的消费方。
Producer:消息生产者,即生产方客户端,生产方客户端 将消息发送到MQ。
支持顺序消息,保证消息送达消费端的前后顺序
前提
同一个队 列
只有一个 消费者 (独占型)
分支主题
思路
架构图
支持批量发送消息
把批量消息放进集合里统一提交,对于channl来说还是 发送一个消息,对于消费方,可以批量的消费
工作模式
工作模式
1
Work queues(工作队列)
2
Publish/Subscribe(发布订 阅)
集群架构
主备模式
所谓主备模式:如果主节点挂了,从节点提供服务 架构图
分支主题
镜像模式
镜像队列
Байду номын сангаас
架构图
分支主题
构建集群视频
分支主题
多活模式
架构图
MQ组件& 架构设计
MQ组件 &架 构设计
架构图
1
组件实现功 能点
2
MQ组件&架构设计
架构图
分支主题
MQ组件&架构设计
列(配合手动确认
消息使用)
02
手动ack确认
01
自动确认
消息接收
自动确认
消费者接收到消息之后自动确认,同时broker会删除消息,这里有一个问题,如果消费者接 收到消息处理业务失败怎么办?
消息接收
手动ack确认
01 application配置: r a b b i t m q . l i s t e n e r. s i m p l e . a c k nowledge-mode: manual
多个词,符号*可以匹配一个词语。
与SpringBoot 整合
与SpringBoot 整合
消费者 添加依赖 application配置 定义监听方法(开启手工签收)
生产者
添加依赖
application配置
定义RabbitConfig类, 配置Exchange、Queue、 及绑定交换机
定义消息发送方法(开启 confirm、return)
Consumer:消息消费者,即消费方客户端,接收MQ转发 的消息。
消息发布接收 流程
消息发布接收流程
发送消 息
接收消 息
消息发布接收流程
发送消息
1、生产者和Broker建立 TCP连接。
3、生产者通过通道消息发送 给Broker,由Exchange将
消息进行转发。
2、生产者和Broker建立 通道。
消息异步确认模式
return消息机制
生产者通过exchange和routingKey,将消息路由到指定的队列中去;消费者监听队列,进行消息消 费;在某些情况下,我们指定的exchange不存在,或者指定的key路由不到队列,这些消息就是不可 达的消息,这个时候就需要用到return listener监听这些不可达的消息;
broker服务器tcp通信故障
消息异步确认模式
confirm消息确认
application添加配置:rabbitemq.publisher-confirms: true #开启 消息发布确认(消息成功发送到broker)
消息异步确认模式
confirm消息确认
代码实现见springboot整合 章节
相关文档
最新文档