RabbitMQ核心知识

本文详细介绍了RabbitMQ的核心知识,包括基本概念、Exchange类型、消息丢失场景及解决方案、持久化、高可用的镜像队列、重复消费处理、消费端限流和死信队列。内容涵盖RabbitMQ的优缺点、各种Exchange类型的工作原理、消息持久化策略、高可用集群的搭建和故障恢复、防止重复消费的机制以及如何通过死信队列确保消息的可靠性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文包含以下内容,总结了一些 RabbitMQ 的核心知识,让你快速熟悉起 RabbitMQ,如有遗漏或有误,非常感激能在评论区中指出来。

一、基本概念、优缺点
二、特点之 Exchange 类型
三、消息丢失场景分析和解决方案
四、持久化
五、高可用之镜像队列
六、重复消费
七、消费端限流
八、死信队列

一、基本概念

1、Message :由消息头和消息体组成,消息体是不透明的,而消息头则是由一系列的可选参数组成,这些属性包括 routing-key、priorty(优先级,优先被消费),delivery-mode(是否持久性存储)等。

2、Publisher:消息生产者

3、Binding:将 Exchange 和 Queue 关联,这样 Exchange 就知道消息路由到哪个 Queue 中。

4、Queue:存储消息,队列的特性是先进先出。一个消息可分发到一个或多个队列。

5、Virtual host :每个 vhost 本质上就是一个 mini 版 的 RabbitMQ 服务器,拥有自己的队列、交换机、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接是指定,RabbitMQ 默认的 vhost 是 /。当不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分多个vhost ,每个用户在自己的 vhost 创建 Exchange 和 Queue。
——多个用户使用同一消息队列,可以使用这个进行管理
file
6、Broker :消息队列服务器的实体。

缺点:
elang 开发不利于二次开发和维护;性能较 kafka 差,持久化消息和 ACK 确认的情况下生产和消费消息吞吐量大约在 1-2 W左右,kafka 的单机吞吐量在 10 W 级别。

优点:
有管理界面,方便使用,可靠性高,功能丰富,支持消息持久化,消息确认机制,多种分发机制。

二、特点之 Exchange 类型

目前四种:direct,fanoout ,topic ,headers

direct :定向,指定 route-key 全匹配,Binding 的交换机和消息队列,以及指定的 route-key 全匹配才会分发。

fanout:广播,有绑定在其交换机的队列都会受到。(消息最快)

topic:可以模糊匹配,route-key 使用「#」匹配多个单词,「*」匹配一个单词

headers:同 direct ,指定关系由 Message 的 headers 属性路由决定。性能较差,一般不使用。

三、消息丢失场景分析和解决方案

1、外界环境问题导致:网络丢包,网络故障。
——解决方案:生产者确认机制。

2、代码层面,配置层面,考虑不完整导致。

(1)原生Mq 操作的交换机、队列没有持久化(AQMQ 有默认持久化)
(2)没有与交换机路由的队列,或是队列无处理等。
(3)代码实现处理未完成,错误未完成消费。

——解决方案
(1)针对消息确认机制,是否发送到 Exchange

#配置增加
spring.rabbitmq.publisher-confirms=true。
#代码:
#定义确认机制的异常处理。
final RabbitTemplate.ConfirmCallback confirmCallback = (CorrelationData correlationData, boolean ack, String cause) -> {
   
   log.info("correlationData: " + correlationData);
   log.info("ack: " + ack);
   if(!ack) {
   
      log.info("异常处理....");
   }
};
#设置 ack 处理犯法
rabbitTemplate.setConfirmCallback(confirmCallback
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值