rabbitMQ知识点
2021-05-14 10:56:41 0 举报
AI智能生成
rabbitMQ脑图
作者其他创作
大纲/内容
RabbitMQ的使用
SpringBoot集成RabbitMQ
SpringBoot Starter依赖引入
连接工厂对象
RabbitTemplate配置
生产者配置
消费者监听配置
高级运用
死信队列
延时队列
限流
队列限流
消费端限流
可靠性投递
服务端向生产者ACK
消息发送到exchange失败ack=false,成功ack=true,需配置pulishConfirs=true
路由
exchange路由到queue失败则返回消息,需配置mandatory=true
队列存储
exchange、queue及消息在内存中存储,重要性高的消息需要配置exchange、queue的持久化即durable=true
消费者向服务端ACK
自动ACK机制在消费者受到消息后,不管后续是否处理正确,都会立即ACK。需要配置手动ACK,在正确处理完成后手动调用ACK方法
回调
消费者处理完成后,通过接口或另一个queue返回成功消息,让生产者知道消息已正确处理,修改状态。(视业务而定,这么做会增加耦合性)
重发
生产者发送的某条消息,在指定的时间内没有收到消费者的回调,则将这条消息重发(可按照需要配置重发次数)
补偿
区别于重发的发生,在消费端使用补偿队列(一个延时队列)对消息的消费做补偿,使偶然状态下失败的消息可以重新消费
幂等
由于重发和补偿的机制,可能造成消息的重复消费,使用唯一标识做判断,如果已消费则抛弃
高可用集群
普通集群
只有一个节点会存放消息,其他的节点只是对交换机、队列等组件做了复制
镜像集群
所有的节点都是一样的,节点与节点之间做消息同步(所有节点同步消息必然会导致吞吐量下降)
负载均衡
对集群的中的每个节点做负载均衡,可以通过HAProxy+KeepAlive来做
项目实践
运用实践
最终一致性
将主系统中修改的数据,发送到广播交换机,其他使用到这个数据的项目都创建队列绑定到这个交换机,监听主系统的修改
优化实践
在配置文件中命名
使用自定义的rabbitmq.properties来定义交换机、队列的名字,而不是直接写死在项目中
规范命名
队列:xxx_QUEUE
路由键:xxx_ROUTING_KEY
交换机:from_服务_to_服务_EXCHANGE
调用方法的封装
将交换机、路由键等参数一致的方法封装起来,对外只提供一个消息参数的方法,简化调用
消息追溯和重发
对于一些重要的消息,可以将消息落入库中,追溯哪些消息是成功发出了的(即使这样占用磁盘空间也要做,避免对方赖账)
除了追溯以外,落库的消息加上状态的更新,也可以用来自由的控制什么时候重发,想重发多少次都可以
消息合成和拆分
对于一些批量发送的相同类型的消息,避免每条消息都建立一次连接,可以将多条消息组合成一条大消息发送。单不宜超过4M
同样的,对于某些比较大的消息的(比如一次性发10000人工资的消息),可以根据行数拆分成一个一个的小消息发送
RabbitMQ
MQ的作用
异步
例如注册账户成功后立即返回成功,后续如果需要发送短信或邮件通知到用户,可以将通知这一步扔到消息队列中异步执行
解耦
对于生产消息的生产者而言,只要往队列中发送消息就可以了,不用关心消费者是怎么消费消息的,也不用关心是哪个消费者消费消息
削峰
高峰期访问的数据放入到队列中,由消费者按照节奏消费,起一个削峰填谷的作用
MQ带来的问题
系统可用性降低
不仅仅是MQ,项目中每多一个中间件,都会增加整个系统的宕机风险(中间件挂了,系统中的某些功能可能就不能用了)
系统复杂性增加
本来一个接口完事儿,加入队列又要维护生产者,又要维护消费者,还得处理消息丢失、重复消费等问题
学习、运维成本增加
团队中需要学习,运维也需要多维护这个中间件
RabbitMQ的理论模型
核心组件
Broker
RabbitMQ的服务端
VHost
虚拟主机,可以创建多个虚拟主机,再给不同的用户分配不同的主机权限
Channel
信道,在每个建立好的TCP长连接中创建信道做消息的传入传出
Exchange
交换机,生产者将消息通过channel发送到交换机,交换机再路由到各个队列中
Queue
队列,用于存放和手法消息
RoutingKey
路由键,与队列绑定,交换机通过消息中的路由键路由到与路由键绑定的队列中
交换机路由方式
直连Direct
路由器完全匹配才会转发
主题Topic
除了完全匹配以外,还可以通过两种通配符来转发
*:代表一个单词
#:啥都可以
广播Fanout
会对关联的所有队列都发送消息
消费模型
pull:消费者主动从队列中拉取消息
push:消费者被动获取队列推送给它的消息(Spring amqp的主要方式,可以通过basicQos设置在ack前最多接收多少条推送)
RabbitMQ的安装和管理
安装
Windows中的安装
CentOS中的安装
Docker中的安装
管理
RabbitMQ管理界面
0 条评论
下一页