消息队列学习总结

article/2025/7/25 22:03:10

1.保证消息不丢失的必要条件

  • 生产者发送消息、生产者存储消息、消费者拉取消息,需要保证三大流程消息不丢失,缺一不可。
  • 生产者保证消息完整发送并存储至broker。
  • broker保证存储的消息不丢失。
  • 消费者保证拉取的消息一定被消费,即使重启了,也能确保未消费的消息继续消费。

2.生产+发送消息流程

以下单为例,下单后增加积分,增加积分这个动作放在消息里实现,且要保证该消息一定发送成功。

这里可以引用TCP协议的ack请求确认机制。如果broker收到生产者推送来的消息,就返回ack给生产者,这样就能保证生产者发送消息这个阶段,消息不会丢失。如果生产者一直没收到ack,可能是网络或者其他原因,这时候就会进行重试,重试次数达到上限后抛异常。但这里抛异常不能影响主流程,所以需要对异常进行特殊处理。如果是同步发送消息,那就try-catch,如果是异步,那就在异步方法对应的onException做异常处理,这里可能要做一些补偿机制。

3.存储流程

broker在返回ack给生产者之前要确保消息已经成功存储了,RocketMQ的消息默认是异步刷盘,先刷到cache上,再等操作系统或定时刷盘任务把消息刷到磁盘上。如果此时断电了,消息就丢失了。所以为了保证消息不被丢失,这里可以把刷盘方式改成同步刷盘(flushDiskType=SYNC_FLUSH)。如果broker是集群,那也得保证主从broker的复制方式是同步复制,这样的话消息就更安全了。

4.消费流程

消费者消费后需要上报点位给broker,告诉broker已经消费到第几条消息了。如果消费者在处理消息的时候异步处理,然后直接告知broker消费成功,就很有可能在消费过程中报错,导致再次拉取消息的时候,从之前上报过的点位继续拉消息,消息就“丢失”了。所以这里要确保消费者真正消费完成消息后,再提交点位。

 


http://www.hkcw.cn/article/dXPMeNTYuo.shtml

相关文章

Unity基础学习(十二)Unity 物理系统之范围检测

目录 一、关于范围检测的主要API: 1. 盒状范围检测 Physics.OverlapBox 2. 球形范围检测 Physics.OverlapSphere 3. 胶囊范围检测 Physics.OverlapCapsule 4. 盒状检测 NonAlloc 版 5. 球形检测 NonAlloc 版 6. 胶囊检测 NonAlloc 版 二、关于API中的两个重…

05.29.2025 CCNA++ 学习完成

05.29.2025 CCNA 学习完成 从哪个遥远的冬天开始的。。。断断续续鸽了几个月(春节,马来西亚旅游), 实际大概学习了3个半月 通过这个学习对网络的底层有了一个更全面的认识,后面还得经常看看才能理解这些东西 课程的资料慢慢补上来 To Be continued…

Vert.x学习笔记-什么是Worker线程池

Vert.x学习笔记 一、Worker线程池的作用二、Worker线程池的特点三、Worker线程池的使用四、Worker线程池的配置与调优五、Worker线程池的工作原理1. 任务分类与线程隔离2. Worker线程池的启动与配置3. 任务提交与执行流程4. 线程安全与上下文切换5. 性能优化与监控6. 关键特性总…

Smith圆图知识学习笔记

Smith圆图知识学习笔记 理论背景 图 1 Smith图表是由菲利普史密斯(Phillip Smith)于1939年发明的,如图1所示,当时他在美国的RCA公司工作。史密斯曾说过,“在我能够使用计算尺的时候,我对以图表方式来表达数学上的关联很有兴趣”。 史密斯图表的基本在于以下的算式: 图 …

MySQL 8.0 OCP 英文题库解析(十一)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题91~100 试题91…

RT-Thread Studio学习(十八)ADC+TIM+DMA

RT-Thread Studio学习(十八)ADCTIMDMA 一、简介二、新建RT-Thread项目并使用外部时钟三、启用ADC四、修改代码五、测试 一、简介 本文将基于STM32F407VET芯片介绍如何在RT-Thread Studio开发环境下使用ADC设备。硬件及开发环境如下: OS WIN…

ES分词搜索

ES的使用 前言作者使用的版本作者需求 简介ES简略介绍ik分词器简介 使用es的直接简单使用es的查询 es在java中使用备注说明 前言 作者使用的版本 es: 7.17.27spring-boot-starter-data-elasticsearch: 7.14.2 作者需求 作者接到一个业务需求,我们系统有份数据被…

Drawio编辑器二次开发

‌ Drawio (现更名为 Diagrams.net )‌是一款完全免费的在线图表绘制工具,由 JGraph公司 开发。它支持创建多种类型的图表,包括流程图、组织结构图、UML图、网络拓扑图、思维导图等,适用于商务演示、软件设计等多种场景…

破解高原运维难题:分布式光伏智能监控系统的应用研究

安科瑞刘鸿鹏 摘要 高原地区光照资源丰富,具有发展分布式光伏发电的巨大潜力。然而,该地区复杂的气候环境、地形地貌和运维条件对光伏电站的运行与维护带来严峻挑战。本文结合Acrel1000DP分布式光伏监控系统的技术特点和典型应用案例,探讨其…

Golang|分布式搜索引擎中所使用到的设计模式

迭代器模式 定义:在遍历接口时,提供统一的方法函数供调用,保持一致性。核心思想:与大众习惯保持一致,方便第三方实现容器类时保持一致。常见方法:如next()方法,适用于所有集合类,简化…

招工招聘系统开发——适配多元场景,满足企业多样化招聘需求

不同的企业有不同的招聘需求,不同的岗位也有不同的招聘特点。我们的招工招聘系统开发,充分考虑了企业的多样化需求,适配多元场景,为企业提供全方位的招聘解决方案。 对于大型企业来说,招聘规模大、岗位种类多、招聘流…

优化版本,增加3D 视觉 查看前面的记录

上图先 运来的超出发表上限,重新发。。。 #11:06:57Current_POS_is: X:77Y:471Z:0U:-2 C:\Log\V55.txt import time import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk import socket import threading from date…

《TCP/IP 详解 卷1:协议》第2章:Internet 地址结构

基本的IP地址结构 分类寻址 早期Internet采用分类地址(Classful Addressing),将IPv4地址划分为五类: A类和B类网络号通常浪费太多主机号,而C类网络号不能为很多站点提供足够的主机号。 子网寻址 子网(Su…

JNI开发流程

一. 引言 最近在做一个自己的项目,就是基于FastDDS封装一套JAVA库,让android和java应用可以使用dds的功能。 由于FastDDS是使用C编写的开源库,因此java的类库想要调用FastDDS的接口,需要额外编写一个JNI层的动态库对FastDDS的接口…

powershell 中 invoke-expression 报错解决

打开powershell就出现这个报错: 网上搜了也没有很好的解决办法,抱着一点点期待,问了豆包 根据豆包的指示,在终端执行以下 几个命令,报错解决了(开心万岁) # 移除多余的引号和空路径 $pathArra…

交错推理强化学习方法提升医疗大语言模型推理能力的深度分析

核心概念解析 交错推理:灵活多变的思考方式 交错推理(Interleaved Reasoning)是一种在解决复杂问题时,不严格遵循单一、线性推理路径,而是交替、灵活应用多种推理策略的方法。这种思维方式与人类专家在处理复杂医疗问题时的思考模式更为接近,表现为一种动态、适应性强的…

【下载ECharts最简单的方法】

最简单下载ECharts的方法 对于简单项目,我们需要的echarts文件是echarts.min.js,以下是下载ECharts的最简单方法: 方法一:直接下载(推荐初学者) 访问ECharts官网:https://echarts.apache.org…

西藏建筑安全员 B 证考试中常见的 单选题及解析

西藏建筑安全员 B 证考试中常见单选题及解析,涵盖安全生产管理、法律法规、安全技术等核心考点,结合西藏地区建筑施工特点整理,帮助理解考试重点: 一、安全生产管理基础 1. 安全管理原则与制度 1、建筑施工安全管理的方针是&am…

案例分享--血管支架的径向力分布评估--DIC数字图像相关技术用于生物医学-高置信度DIC测量

医疗设备制造商有责任创造和确保高效且安全的产品,以守护人类的健康。EchoBio LLC公司的Kenneth Perry博士是植入式医疗设备实验验证行业的领导者和专家。Perry博士的一项研究任务是评估用于疏通血管阻塞的编织自膨胀支架的径向力分布。Perry博士特别需要关注径向力…

[Javascript进阶]JSON.stringify与JSON.parse详解

JSON.stringfy JSON.stringify 的核心作用是: 👉 将 JS 的对象、数组、基本类型转换为合法的 JSON 字符串。 手撕实现时,要考虑以下几个方面: 基本类型处理: string → 加上双引号,注意转义;nu…