当前位置: 首页 > news >正文

RabbitMQ MQ的可靠性及消费者的可靠性

1.MQ可靠性:

如何保证消息的可靠性:

        (1).通过配置可以让交换机、队列、以及发送的消息都持久化。这样队列中的消息会持久化到磁盘,MQ重起消息依然存在。

        (2).3.6.0版本开始,RabbitMQ引入了惰性队列模式,这种模式下,消息会直接存储到磁盘而不是内存中,这样可以减少内存消耗,尤其适用于消息量特别大的场景。在3.12版本之后,惰性队列已经成为RabbitMQ的默认队列类型。

        (3).开启持久化和生产者确认时,RabbitMQ只有在消息持久化完成后才会给生产者返回ACK回执。

消息持久化

        消息持久化是确保 RabbitMQ 中的消息在服务器重启或崩溃后不会丢失的重要机制。通过持久化消息,可以将消息存储在磁盘上,而不仅仅是内存中。这样,即使 RabbitMQ 服务器发生故障,消息也不会丢失,因为它们可以从磁盘上恢复。  

持久化队列:在创建队列时,可以指定队列为持久化的。这意味着队列的元数据和其中的消息都会在 RabbitMQ 服务器重启后恢复。

持久化消息:当发送消息时,可以通过设置消息的 deliveryMode 属性为 2(表示消息是持久化的)来确保消息被持久化到磁盘。

确保交换器持久化(可选):虽然交换器的持久化不是必需的,但建议也将其设置为持久化,以确保交换器的配置在服务器重启后能够恢复。

2.消费者可靠性

消费者如何保证消费者一定被消费:

        (1). 开启消息确认机制为auto,由spring确认消息处理成功后返回ack,异常时返回nack

        (2).开启消费者失败重试机制,并设置MessageRecover,多次重试失败后将消息投递到异常交换机,交由人工处理。

消费者确认机制

        消费者确认是一种确保消息被正确处理的协议。当 RabbitMQ 将消息传递给消费者后,消费者需要通过发送一个确认回 RabbitMQ 来告知它已经成功接收并处理了这个消息。这样,RabbitMQ 才会从队列中移除该消息。这个机制对于确保数据的可靠性至关重要。RabbitMQ提供了两种消费者确认模式:

        (1).自动确认(Auto Acknowledge)

  • 模式描述:消息一旦被消费者接收,RabbitMQ立即认为该消息已被成功处理,并将其从队列中删除,无需等待消费者明确确认。
  • 优点:吞吐量高,因为省去了显式确认的过程。
  • 缺点:如果消费者在处理消息过程中崩溃,消息会丢失,因为RabbitMQ在消息到达消费者时就已经将其标记为已处理。

        (2).手动确认(Manual Acknowledge)

  • 模式描述:消费者在处理完消息后,需要显式地向RabbitMQ发送确认(ACK)信号,表明该消息已经被成功处理。只有当收到这个确认后,RabbitMQ才会将消息从队列中删除。
  • 优点:确保消息不会因消费者故障而丢失。如果消费者处理消息失败,RabbitMQ可以将该消息重新投递给其他消费者(或同一消费者)。
  • 缺点:稍微增加了系统的复杂性和延迟,因为需要等待消费者的明确确认。

消费者失败重试机制

        消费者失败重试机制是一种确保消息在处理失败时能够被重新处理的策略。消费者在处理消息时,如果发生异常,可以在本地进行重试。重试的次数和间隔可以通过配置来设定。例如,在Spring AMQP中,可以通过application.yml文件配置重试机制,如下所示:

如何保证业务幂等性

     为每条消息生成唯一的ID,并在消费时检查是否已处理过。在数据库层面使用唯一约束,防止重复插入。

http://www.lryc.cn/news/450710.html

相关文章:

  • 使用 Nexus 代理 Docker Hub 的配置指南
  • 笔记整理—linux进程部分(4)进程状态与守护进程
  • # VirtualBox中安装的CentOS 6.5网络设置为NAT模式时,怎么使用SecureCRT连接CentOS6.5系统?
  • 7-1.Android SQLite 之 SQLiteDatabase 简单编码模板(SQLiteDatabase 使用、SQL 语句编写)
  • 灰度图像重心(质心)求取算法
  • k8s 1.28.2 集群部署 ingress 1.11.1 包含 admission-webhook
  • pom web 自动化测试框架分享
  • 一些以前使用的linux及shell命令,gnuplot脚本
  • Django一分钟:DRF模型序列化器处理关联关系的示例与注意事项
  • Python爬虫selenium框架基本使用
  • sql 时间交集
  • 【深度学习】05-Rnn循环神经网络-01- 自然语言处理概述/词嵌入层/循环网络/文本生成案例精讲
  • 基于JAVA+SpringBoot+Vue的电商平台的设计与实现
  • CSS盒模型-怪异盒模型笔记-思维导图-案例等
  • thinkphp6开发的通用网站系统源码
  • Junit 5 - 理解Mockito,提高UT 覆盖率
  • 微服务sentinel解析部署使用全流程
  • YOLO11震撼发布!
  • 机器学习框架(含实例说明)
  • vue2与vue3知识点
  • 从源码中学习动态代理模式
  • 谷歌浏览器完美清除缓存
  • 《如何高效学习》
  • 阿里云ACP认证考试题库
  • 学习经验分享【38】YOLOv11解读——最新YOLO版本
  • 电商选品/分析| 亚马逊常见插件爬虫实战之-helium插件
  • 遇到慢SQL、SQL报错,应如何快速定位问题 | OceanBase优化实践
  • postgresql僵尸进程的处理思路
  • Springboot 练习
  • ISA-95制造业中企业和控制系统的集成的国际标准-(3)