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

RabbitMQ高级特性之发送方确认

背景:

从消费者来说,如果在订阅队列的时候将autoAck参数设置为true的时候,那么一旦消费者接收了消息就会将消息自动从mq去除,但是可能还没来得及消费,消费者就宕机了,这种算作为数据丢失,针对这种是很好解决的,将autoAck参数设置为false即可,也就是消费者在正确消费以后然后就进行mq中对应消息的手动删除。

从RabbitMQ来说,在持久化的消息正确存入RabbitMQ之后,之后还需要有一段时间才能存入磁盘中,RabbitMQ并不会为每条消息都进行同步存盘的处理,可能仅仅保存到操作系统缓存之中而不是物理磁盘之中,如果在这段时间RabbitMQ服务节点发生了宕机,重启等异常情况,消息保存还没来得及落盘,那么消息将会丢失。

针对于第二种场景,就需要引入一种新的模式来进行解决,就是发送方确认,发送方这边确认消息已经到达RabbitMQ服务器,需要发送方确认机制来实现。

1.发送发确认机制

RabbitMQ提供了两种方式来供我们控制消息的可靠性投递:confirm模式(检查消息是否到达消费方)和return模式(检查消费是否到达消费方,如果中途出现错误,则会退还消息)。

1.1 confirm模式

Producer在发送消息的时候,对发送端设置一个ConfirmCallback的监听,无论消息是否已经到达Exchange,这个监听都会被执行,如果Exchange成功收到,ACK为true,如果没有接收到消息。ACK就为false。

(1)配置application.yml(当然也可以选用application.properties)

ps:address中需要有用户名和密码(使用的RabbitMQ的管理界面需要进行登录),服务器的地址,虚拟主机名(每一个主机都有属于自己的Exchange,Queue....)

(2)config配置类:

需要使用@Bean注解来声明对应对象的名称;在创建绑定关系的时候需要使用@Qualifier注解来声明对应Exchange和Queue的名称。

该配置类主要作用:完成Exchange,Queue,Binding在RabbitMQ虚拟机上的注册。

(3)RabbitTemplate配置类:

该配置类的作用:设置ConfirmCallback(是RabbitTemplate的属性)监听,监听消息是否到达服务器。

(4)Listener类:

 作用:监听某个队列,一旦有消息就进行消费。

(5)Producer类:

作用:接收来自外界的消息,并且发送给对应的Exchange。

(6)访问127.0.0.1:8080/producer/confirm所得到的结果为:

(ACK为true) 

倘若将消息发到一个不存在的Exchange,那么此时消息就会确认失效。

可以看到日志中提示没有aaa的Exchange。

1.2 Return模式

Producer在发送消息的时候,对发送端设置ReturnsCallback的监听,无论消息是否已经到达Exchange,这个监听都会被执行,如果Exchange成功收到并成功转发到Queue中,则无事发生,如果Exchange接收消息失败/消息没有转发到对应的Queue中,此时就会退还消息。

(1)config配置类:

(2)RabbitTemplate配置类:

Mandatory必须设置为true,否则如果消息发送失败则不会退还消息。

(3)Producer类:

 (4)访问127.0.0.1:8080/producer/ret得到结果:

由于routingKey(ret)与创建绑定时的routingKey(return)匹配不上,会发送到对应Exchange但对应Exchange转发不到Queue中,所以此时会回退消息:


http://www.kler.cn/a/510890.html

相关文章:

  • 【前端动效】HTML + CSS 实现打字机效果
  • 自定义BeanPostProcessor实现自动注入标注了特定注解的Bean
  • 计算机网络 (49)网络安全问题概述
  • 三电平空间矢量详解
  • 企业分类相似度筛选实战:基于规则与向量方法的对比分析
  • Excel中函数SIGN()的用法
  • 类和对象(3)——继承:extends关键字、super关键字、protected关键字、final关键字
  • SLAM 6 3Dto2D 的Pnp 和光束平移法
  • 医院挂号就诊系统设计与实现(代码+数据库+LW)
  • 红黑树封装map和set(c++版)
  • Vue3:当v-if和v-for同时使用时产生的问题和解决办法
  • AI Agent的总体概念:感知,记忆,规划,外部工具,执行
  • PTA乙级1001~1005【c++】
  • 线段树优化dp,abc389F - Rated Range
  • C++中.h文件中的实现方法
  • 云原生前端开发:打造现代化高性能的用户体验
  • Kotlin Bytedeco OpenCV 图像图像54 透视变换 图像矫正
  • C#如何获取电脑中的端口号和硬件信息
  • Observability:最大化可观察性 AI 助手体验的 5 大提示(prompts)
  • 游戏开发中常用的设计模式
  • 大数据中 TopK 问题的常用套路
  • 基于.NetCore+Vue的贫困地区儿童资助系统
  • GraphRAG: Auto Prompt Tuning 实践
  • 一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建
  • PyTorch使用教程- Tensor包
  • windows 远程链接 Ubuntu 24.04 LTS 图形界面