码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Spring boot 实践Rabbitmq消息防丢失


    之前看很多网上大佬的防丢失的文章,文章中理论知识偏多,所以自己想着实践一下,实践过程中也踩了一些坑,因此写出了这篇文章。如果文章有误人子弟的地方,望在评论区指出。

    导致消息出现丢失的原因

    1. 发送时失败,指发送端发送完消息准备到达消息队列的过程中,因网络波动、消息队列服务宕机等,消息队列服务无法接收消息,所以导致了丢失。

    2. 到达时宕机,消息队列服务接收到消息之后,如果没有开启持久化,消息会存储在内存中(当然内存吃紧的话,也会转入磁盘,缓解内存),如果这个时候服务挂了,那么内存中的消息就会丢失。

    3. 发送到消费端失败,消费端接收到了消息的时候,消费端服务挂了,而rabbitmq默认自动ack,也就是说rabbitmq发送到消费端,一旦认定了消费端接收了,无论有无消费成功,rabbitmq都认为是发送成功。

    下面我们以这三种情况进行实践。

    环境

    jdk1.8 Spring boot 2.3.7.RELEASE Spring-boot-starter-amqp 2.3.7.RELEASE Rabbitmq 3.7.7

    准备工作

    我事先准备了好了交换机以及队列

    • 交换机:message.log.test.exchange和message.log.test2.exchange

    • 队列:message.loss.test.queue

    其中message.loss.test.queue和message.log.test.exchange是绑定关系,而 message.log.test2.exchange没有绑定队列

    1.发送时失败

    发送时失败,rabbitmq有两种情况是属于发送时失败。

    1. 消息未到rabbitmq的交换机(exchange)

    2. 消息到达了rabbitmq的交换机(exchange),但是没有到达队列(queue)

    第一种的解决方式是使用confirm机制。第二种解决方式则是使用return机制。

    使用confirm机制

    模拟场景

    confirm机制是当发送端的消息没有到达rabbitmq的交换机(exchange)时,会触发confirm方法,告诉发送端该消息没有到达rabbitmq,需要做业务处理。 这里我们发送消息到rabbitmq不存在的交换机上,就可以模拟上述场景。

    实现RabbitTemplate.ConfirmCallback接口

    1. /**
    2. * 当消息没有到达Rabbitmq的交换机时触发该方法(当然到达了也会触发,)
    3. */
    4. @Component
    5. public class
  • 相关阅读:
    Java毕业设计-网上宠物店系统
    JVM学习(五)--方法区
    【免费赠送源码】Springboot理发店线上预约排队的设计与实现 7vsz2计算机毕业设计-课程设计-期末作业-毕设程序代做
    汽车三高试验离不开的远程试验管理平台-TFM
    女生学Java好找工作吗?女生适合编程吗?
    跨境电商做什么产品好?2022速卖通热销品类榜单来袭!
    catalog database 的配置
    uni-app H5使用 tabbars切换,echartst图表变小 宽度只有100px问题解决
    第3章:数据链路层
    .NET6打包部署到Windows Service
  • 原文地址:https://blog.csdn.net/Java_zhujia/article/details/127964016
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号