RabbitMQ
2022-04-17 15:37:12 42 举报
AI智能生成
登录查看完整内容
RabbitMQ
作者其他创作
大纲/内容
流量消峰
消息模块解耦
异步
特点
维护少
ActiveMQ
Kafka(大型公司)
RocketMQ(双11等高并发场景)
商业版付费
RabbitMQ(中小公司)
常见的MQ
概述
通常将交换机名设为空串
简单队列
默认交换机(AMQP default)
对多个queue使用相同routingKey绑定
发布订阅
扇出 (fanout)
路由模式
直接 direct
以点联系的单词列表
*(星号)可以代替一个单词#(井号)可以替代零个或多个单词
routingKey格式:
对routingKey进行判定而确定是否发送到对应队列
主体 topic
标题 headers
类型
交换机 Exchange
队列
生产者
消费者
四大核心概念
默认交换机
一个消息被处理一次
工作队列
六种模式
消费者在接收到消息并且处理该消息之后,告诉 rabbitmq 它已经处理了(肯定/否定),rabbitmq 可以把该消息删除了
自动应答
Multiple
Channel.basicAck
肯定确认
Channel.basicNAck()
与 Channel.basicNack 相比少一个参数 不处理该消息了直接拒绝,可以将其丢弃了
Channel.basicReject()
否定确认
手动应答
消息的确认 -- 消息应答
消费者断连 -- 消息自动重新入列
队列持久化
消息持久化
服务器宕机 -- 消息和队列的持久化
前提: 队列、消息的持久化开启
channel.confirmSelect()
开启生产者信道的发布确认
channel.waitForConfirms() : boolean
(生产者)获取发布确认的结果
开启发布确认
原理: 调用waitForConfirms() 返回 自上次调用以来消息发布结果
普通确认 单个 (简单,但吞吐量非常有限)
具体子模式
同步
实现
异步确认 (综合性能和排错性最佳)
三种模式
持久化间隔点时的服务器宕机 -- 发布确认
消息被拒
消息TTL过期
队列达到最大长度
异常情况
子主题
死信队列模型
延迟死信
基于死信的延迟消息
异常消息的处理 -- 死信队列
消息的防丢失
preFetchCount预取值
channel.BasicQos( prefetchCount )
对消费者信道进行预取值设定 prefetchCount
设置
0
轮询(默认)
1
其它自定义的 >1 的预取值
根据机器性能 -- 不公平分发
消息分发策略
rabbitmq_delayed_message_exchange-3.8.0.ez
解决方法: 使用 延时队列交换机插件
模型
延时队列
spring.rabbitmq.publisher-confirm-type=correlated
spring.rabbitmq.publish-return: true
前提: 开启发布确认模式/队列回退
RabbitTemplate.ConfirmCallBack
交换机(发布确认)
RabbitTemplate.ReturnCallBack
rabbitTemplate.mandatory = true
队列(队列回退)
在broker块对消息是否接收进行回调反馈
架构
发布确认高级与队列回退
可以替代队列回退 进行 队列的路由异常的处理. 优先级比队列回退高
当交换机接收到一条不可路由消息时,将会把这条消息转发到备份交换机中,由备份交换机来进行转发和处理,通常备份交换机的类型为 Fanout ,这样就能把所有消息都投递到与其绑定的队列中
功能
使用参数 \"alternate-exchange=备份交换机名\" 对主机进行绑定设置
使用
备份交换机
唯一ID
Redis Setnx
幂等性
队列开启优先级设置 \"x-max-priority=最大优先级\
优先级队列
default正常队列(内存); lazy惰性队列(磁盘)
队列的模式设置 \"x-queue-mode=指定模式\"
在慢消费-消息大量堆积而长时间不能消费的情况下节省内存
惰性队列
HaProxy + KeepAlive
高可用负载均衡
开发中其它场景
https://blog.csdn.net/Epoch_Elysian/article/details/94075456
异常报错
联邦交换机 Federation Exchange
联邦队列 Federation Queue
集群状态下(网络延迟导致的)数据一致性问题
RabbitMQ的集群与镜像队列
RabbitMQ
0 条评论
回复 删除
下一页