中间件之RocketMQ
RocketMQ是一个开源的分布式消息队列系统,起源于阿里巴巴集团内部。最初,RocketMQ(前身为Metaq)被设计为满足阿里巴巴集团内部大规模分布式系统下的高吞吐量、低延迟和高可靠性的消息传递需求。随着其在阿里巴巴内部的广泛应用和不断优化,RocketMQ逐渐成为一个成熟且功能丰富的消息中间件解决方案。
在经历了一段时间的内部发展和测试之后,阿里巴巴将RocketMQ作为开源项目捐赠给了Apache软件基金会。随后,RocketMQ进入Apache孵化器,并于2016年成功成为Apache顶级项目。这一举措不仅体现了RocketMQ的技术实力和社区认可度,也为其后续的发展注入了新的动力。
一、功能
RocketMQ提供了多种强大的功能,以满足不同场景下的消息传递需求。以下是一些主要的功能特点:
1、高可用性和高可靠性:
RocketMQ支持多Master多Slave的同步双写以及异步复制模式,确保消息在传输和存储过程中的高可用性和高可靠性。此外,RocketMQ还提供了多种消息发送和存储策略,如同步发送、异步发送、同步刷盘和异步刷盘等,以进一步提高消息的可靠性和性能。
2、高性能和低延迟:
RocketMQ采用高效的消息传输和存储机制,能够实现高吞吐量和低延迟的消息处理。这使得RocketMQ非常适合处理大规模的消息传递任务,如实时计算、日志采集等。
3、异步解耦:
RocketMQ通过异步消息传递机制,将消息的发送和接收过程进行解耦,降低了系统的耦合性,提高了系统的稳定性和可伸缩性。
4、流量削峰:
在高并发场景下,RocketMQ能够将请求转换为消息,并通过消息队列平滑地削峰填谷,保证后端服务的稳定性和响应速度。
5、顺序消息:
RocketMQ支持顺序消息,可以确保消息按照发送的顺序被消费。这对于一些对消息顺序有严格要求的场景非常重要,如订单处理、流程审批等。
6、消息过滤和标签:
RocketMQ支持根据消息的Tag进行过滤,使得消费者可以只关注自己感兴趣的消息。此外,RocketMQ还提供了SQL92标准的消息过滤机制,允许消费者根据消息的属性进行更复杂的过滤操作。
7、分布式事务消息:
RocketMQ支持分布式事务消息,通过半消息确认和消息回查机制来保证分布式事务的一致性。这使得RocketMQ非常适合在分布式系统中处理复杂的业务逻辑。
8、丰富的监控和管理功能:
RocketMQ提供了丰富的监控和管理功能,帮助用户监视系统状态、消息流和性能指标。这有助于用户及时发现并解决问题,保证系统的稳定运行。
二、使用场景
RocketMQ因其强大的功能和灵活的配置,被广泛应用于各种场景中。以下是一些常见的使用场景:
1、异步解耦:
在微服务架构中,各个服务之间往往需要异步通信以解耦服务间的依赖关系。RocketMQ作为消息中间件,可以很好地实现这一需求。
2、流量削峰:
在秒杀、抢购等高并发场景下,直接请求后端服务可能会导致服务过载。通过使用RocketMQ将请求转换为消息并存储在队列中,可以平滑地削峰填谷,保证后端服务的稳定性。
3、日志采集:
在分布式系统中,日志采集是一个常见的需求。RocketMQ支持高吞吐量和低延迟的消息处理,非常适合用于日志采集场景。
4、实时计算:
在实时计算场景中,数据需要实时地从一个系统传输到另一个系统进行处理。RocketMQ提供了高效的消息传输机制,可以确保数据的实时性和准确性。
5、分布式模式缓存同步:
在分布式系统中,多个节点之间需要保持数据的一致性。通过使用RocketMQ的广播消费模式,可以将数据变化通知到所有节点,实现缓存的同步更新。
6、分布式定时/延时调度:
RocketMQ提供了精确的分布式定时消息能力,可以应用于订单超时处理、分布式延时调度等场景。
三、历史版本介绍
RocketMQ经历了多个版本的迭代和优化,以下是其主要版本的历史介绍:
1、Metaq 1.x:
由开源社区killme2008维护,此时Metaq还处于初步发展阶段,但已经展现出了其作为消息中间件的潜力。
2、Metaq 2.x:
于2012年10月份上线,在淘宝内部被广泛使用。这一版本的Metaq在功能和性能上都有了较大的提升,为RocketMQ的后续发展奠定了基础。
3、RocketMQ 3.x:
基于公司内部开源共建原则,RocketMQ项目只维护核心功能,并去除了所有其他运行时依赖。这一版本的RocketMQ更加精简和高效,为大规模分布式系统提供了更好的支持。
随着版本的迭代和升级,RocketMQ在功能、性能和稳定性方面都有了显著的提升。目前,RocketMQ已经成为Apache顶级项目之一,并被广泛应用于各种分布式系统中。
四、使用示例
以下是一个简单的Java代码示例,展示了如何使用RocketMQ发送和接收消息:
// 生产者发送消息
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message; public class Producer { public static void main(String[] args) throws Exception { // 实例化消息生产者Producer DefaultMQProducer producer = new DefaultMQProducer("example_group_name"); // 设置NameServer的地址 producer.setNamesrvAddr("localhost:9876"); // 启动Producer实例 producer.start(); // 创建消息实例,指定topic,tag和消息体 Message msg = new Message("TopicTest", "TagA", ("Hello RocketMQ").getBytes()); // 发送消息到一个Broker producer.send(msg); // 如果不再发送消息,关闭Producer实例。 producer.shutdown(); }
} // 消费者接收消息
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt; import java.util.List; public class Consumer { public static void main(String[] args) throws Exception { // 实例化消费者 DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("example_group_name"); // 设置NameServer的地址 consumer.setNamesrvAddr("localhost:9876"); // 订阅一个或多个Topic,以及Tag来过滤需要消费的消息 consumer.subscribe("TopicTest", "*"); // 注册回调以在消息到达时执行一些操作 consumer.registerMessageListener(new MessageListenerConcurrently() { @Override public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) { System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs); // 标记该消息已经被成功消费 return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); // 启动消费者实例 consumer.start(); System.out.printf("Consumer Started.%n"); }
}
在上述示例中,我们分别创建了生产者和消费者来发送和接收消息。生产者通过DefaultMQProducer类实例化,并设置NameServer地址和Topic等信息后,调用send方法发送消息。消费者则通过DefaultMQPushConsumer类实例化,并设置相应的配置后,注册一个消息监听器来接收并处理消息。
五、总结
RocketMQ作为一款高性能、高可靠、高可用的分布式消息队列系统,在微服务架构、大数据处理、实时计算等领域具有广泛的应用前景。其强大的功能和灵活的配置使得它能够满足不同场景下的消息传递需求。随着技术的不断发展和社区的不断壮大,RocketMQ将继续为分布式系统提供稳定可靠的消息传递服务。
相关文章:
中间件之RocketMQ
RocketMQ是一个开源的分布式消息队列系统,起源于阿里巴巴集团内部。最初,RocketMQ(前身为Metaq)被设计为满足阿里巴巴集团内部大规模分布式系统下的高吞吐量、低延迟和高可靠性的消息传递需求。随着其在阿里巴巴内部的广泛应用和不…...
linux第二课(docker的安装使用)
目录 一.关于docker (1)背景引入 (2)docker介绍 (3)功能 (4)Docker架构 二.docker的安装及相关的命令 (1)docker的安装 (2)docker的配置 (3)docker镜像命令 (4)容器命令 三.docker安装myaql 编辑 四.数据卷挂载 1.数据卷挂载引入 2.数据卷挂载图解 3.数据卷的安装…...
Java数据存储结构——二叉查找树
文章目录 22.1.2二叉查找树22.1.2.1 概述22.1.2.1二叉查找树添加节点22.1.2.2二叉查找树查找节点22.1.2.3 二叉树遍历22.1.2.4 二叉查找树的弊端 22.1.2二叉查找树 22.1.2.1 概述 二叉查找树,又称二叉排序树或者二叉搜索树 二叉查找树的特点: 每一个节点上最多有…...
JavaScript 事件处理
一、简介 事件:发生在HTML元素上的事情,可以是用户的行为,也可以是浏览器的行为,如 用户点击了某个HTML元素用户将鼠标移动到某个HTML元素上用户输入数据时光标离开页面加载完成 事件源:事件触发的源头…...
容器技术--Docker应用部署
应用部署 容器部署mysql 搜索并拉取镜像;基于镜像启动容器,注意端口映射、目录映射启动后即可连接# 搜索镜像 docker search mysql # 拉取镜像 docker pull mysql:5.7 # docker pull mysql 默认拉取最新的# 创建mysql容器, -p端口映射(宿主端口:容器端口) -e 环境变量,镜…...
医院管理|基于java的医院管理系统小程序(源码+数据库+文档)
医院管理系统小程序 目录 基于java的医院管理系统小程序 一、前言 二、系统设计 三、系统功能设计 医生信息管理 排班信息管理 科室信息管理 科室预约 病历信息 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取:…...
golang学习笔记21——golang协程管理及sync.WaitGroup的使用
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...
C++初阶大全
目录 一.命名空间 1.命名空间定义 2.命名空间使用 二.C输入&输出 三.缺省参数 四. 函数重载 五.引用 1.常引用 2.传值、传引用效率比较 3.引用和指针的区别 4.引用和指针的不同点: 小知识点: 六.内联函数 七.auto关键字(C11) 1.auto的使用细则 八.基于范围…...
使用Redis实现用户关注博客的推模式
目录 一、思路 二、实现代码: 一、思路 发布者: 这里采用redis的zset结构,将键设置为被推送用户id,值设置为博客id,score设置为时间戳 推送之前先查到当前发布博客用户的粉丝有哪些,然后去循环挨个推送…...
python常用模块之time、datetime、randow(14)
文章目录 前言1、time模块1.1 导入模块1.2 使用方法1.2.1 时间戳1.2.2 程序休眠1.2.3 扩展:按某种格式显示当前时间1.2.4 结构化时间 2、datetime模块2.1 导入模块2.2 使用方法2.2.1 得到当前系统的时间2.2.2 拓展:编写一个时钟小程序 3、random模块3.1 …...
根据NVeloDocx Word模板引擎生成Word(六-结束)
前面几篇已经把E6开发平台配套的Word模版隐藏NVeloDocx的基础用法介绍了一遍,这些基础用法基本上可以完全覆盖实际业务的绝大部分需求。所以我们这一篇就介绍一些边边角角的内容,给本系列来一个首尾。 本篇的主要内容有: 1、汇总计算&#…...
Android架构组件:MVVM模式的实战应用与数据绑定技巧
目录 引言 一、MVVM模式概述 1.1 MVVM模式简介 1.2 MVVM模式的优势 二、MVVM模式的实现 2.1 项目环境配置 2.2 创建MVVM组件 2.2.1 创建数据模型 2.2.2 创建数据仓库 2.2.3 创建ViewModel 2.2.4 创建布局文件 2.2.5 创建RecyclerView适配器 2.3 在Activity中绑定V…...
调用系统的录音设备提示:line with format PCM_SIGNED 16000.0 Hz
javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 16000.0 Hz, 8 bit, mono, 1 bytes/frame, not supported. 打开 设置->隐私->麦克风->允许应用访问你的麦克风 与 16000Hz没关系 与 16000Hz没关系 与 16000Hz没关系...
android BLE 蓝牙的连接(二)
下面是基于实际的项目得到的具体步骤及核心代码 1、权限问题 先判断手机是否满足android4.3以上版本,再判断手机是否开启蓝牙 主要涉及蓝牙权限和位置权限,注意不同android版本之间权限申请的差异,以及android权限动态申请和静态申请的区别 …...
改编pikachu的打靶经历(题目不全)
前言 题目很少,只做了一些。正常版本的,完整的pikachu可参考下面这个师傅写的 https://www.cnblogs.com/henry666/p/16947270.html xss (get)反射xss 先尝试 1 这里有长度限制,而且,我改了长度…...
Linux进阶 修改文件所有者
修改文件所属组群——chgrp 修改文件所属组群很简单-chgrp命令,就是change group的缩写(我们可以利用这些来记忆命令) 语法:chgrp 组群 文件名/目录 举例: [root@redhat ~]# groupadd groupa[root@redhat ~]# groupadd groupb[root@redhat ~]# useradd -g groupa zgz[r…...
第312题|二重积分求旋转体体积(二)|武忠祥老师每日一题
解题思路:先画出图像,再利用旋转体体积计算公式进行解题。 1. 旋转体体积计算公式: 2.点到直线计算公式: 有了上面两条知识储备之后我们开始计算。 第一步:先计算出点到直线的距离: ymx,y-mx…...
redis基本数据结构-set
文章目录 1. set的基本介绍1.1. set底层结构之hash表的简单介绍1.2. 常用命令 2. 常见的业务场景2.1. 标签系统2.2. 社交网络好友关系 1. set的基本介绍 参考链接:https://mp.weixin.qq.com/s/srkd73bS2n3mjIADLVg72A redis 的 set 数据结构是一个无序的集合&#…...
Android 应用安装-提交阶段
经过前面准备、浏览、协调这些步骤,马上要进入提交阶段了。所谓提交,就是把这些安装应用的相关信息和状态都放到系统中。对于已安装普通应用,它其实分为两个步骤,先卸载旧包,再安装新包。当然,如果是新安装…...
强化学习Reinforcement Learning|Q-Learning|SARSA|DQN以及改进算法
一、强化学习RL 强化学习是机器学习的一个重要的分支,是一种有效的工具,在文献中被广泛用于解决MDP问题。在一个强化学习过程中,一个智能体只能通过和它所处的环境互动学习最优策略。特别地,智能体首先观察自己当前的状态…...
Spring AI 助力 Java 开发者构建全功能 AI 智能体
【导语:随着人工智能的迅速发展,Java 开发者在将 AI 能力集成到基于 Spring 的应用程序方面选择有限。Spring AI 的出现改变了这一局面,本文详细介绍了如何使用 Spring AI 构建基于 Java 的全功能 AI 智能体。】Spring AI 打破 Java 集成 AI …...
2025届最火的六大AI科研方案解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在人工智能内容生成技术越来越普遍的情形下,各种各样的降AI工具出现了࿰…...
终极性能调优指南:如何配置dnstwist实现超高速域名扫描
终极性能调优指南:如何配置dnstwist实现超高速域名扫描 【免费下载链接】dnstwist Domain name permutation engine for detecting homograph phishing attacks, typo squatting, and brand impersonation 项目地址: https://gitcode.com/gh_mirrors/dn/dnstwist …...
Git-RSCLIP多模态检索实战:输入‘干旱期农田龟裂纹理’召回匹配影像
Git-RSCLIP多模态检索实战:输入干旱期农田龟裂纹理召回匹配影像 1. 引言:当遥感图像遇上智能检索 想象一下这样的场景:你手头有成千上万张遥感图像,需要快速找到那些显示"干旱期农田龟裂纹理"的图片。传统方法可能需要…...
快速启动Tensorboard并解决本地端口访问问题的实战指南
1. Tensorboard快速启动指南 Tensorboard是TensorFlow生态中不可或缺的可视化工具,它能直观展示模型训练过程中的损失曲线、准确率、计算图等重要信息。但很多新手在第一次使用时,常常卡在启动后无法访问的环节。这里分享我调试过上百个模型总结出的启动…...
好写作AI:解锁硕士毕业论文的“智慧密码箱”
对于攻读硕士学位的学子来说,撰写毕业论文无疑是一场充满挑战的“学术马拉松”。从选题时的千思万虑,到研究过程中的艰难探索,再到最终成文时的反复打磨,每一步都考验着大家的智慧与毅力。而好写作AI(官网:…...
Windows运行库终极解决方案:VisualCppRedist AIO完全指南
Windows运行库终极解决方案:VisualCppRedist AIO完全指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这种情况:满怀…...
云服务器是如何保障数据安全的
在云服务器中,访问控制机制是重要的安全屏障。云服务商会实施严格的身份认证,用户需要通过密码、密钥、生物识别等多种方式进行身份验证,只有通过验证的用户才能获得相应的操作权限。同时,基于角色的访问控制将用户分配到不同角色…...
重构macOS滚动体验:Scroll Reverser的跨设备解决方案
重构macOS滚动体验:Scroll Reverser的跨设备解决方案 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 破解多设备滚动的混乱困局 当设计师小李同时连接数位板和鼠标工…...
Qwen3.5-4B模型10分钟快速部署体验:开箱即用的推理服务
Qwen3.5-4B模型10分钟快速部署体验:开箱即用的推理服务 1. 惊艳的开箱即用体验 第一次在星图GPU平台上部署Qwen3.5-4B模型时,我有点不敢相信整个过程如此简单。从选择镜像到完成部署,再到开始第一次对话,全程只用了不到10分钟。…...
