RocketMQ学习笔记(一)
RocketMQ学习笔记
消息中间件应用场景
- 应用解耦
- 削峰填谷
- 数据分发
常见的消息中间件
- ActiveMQ:Apache出品,比较老的一个开源的消息中间件,以前在中小企业应用广泛
- Kafka:Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统。
- RabbitMQ:基于erlang语言开发的消息中间件,RabbitMQ最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。适用于对数据的一致性、稳定性和可靠性要求比较高的场景
- RocketMQ:高性能、低延时和高可靠性等特性
消息中间件对比
| Kafka | RocketMQ | RabbitMQ | |
|---|---|---|---|
| 定位 | 日志消息、监控数据 | 非日志的可靠消息传输 | 非日志的可靠消息传输 |
| 可用性 | 非常高、分布式、主从 | 非常高、分布式、主从 | 高、主从、采用镜像模式实现,数据量大时可能有性能问题 |
| 消息可靠性 | 异步刷盘,容易丢数据 | 同步刷盘、异步刷盘 | 同步刷盘 |
| 单机吞吐量 | 百万级 | 十万级 | 万级 |
| 堆积能力 | 非常好 | 非常好 | 一般 |
| 顺序消费 | 支持,一台broker宕机后,消息会乱序 | 支持,顺序消费场景下,消费失败时消费队列将会暂停 | 支持,如果一个消费失败,此消息的顺序会被打乱 |
| 定时消息 | 不支持 | 支持 | 支持 |
| 事务消息 | 不支持 | 支持 | 不支持 |
| 消息重试 | 不支持 | 支持 | 支持 |
| 死信队列 | 不支持 | 支持 | 支持 |
| 访问权限 | 无 | 无 | 类似数据库,配置用户名和密码 |
核心概念
- 消息生产者Producer:往RocketMQ发送消息的应用程序
- 消息消费者Consumer:从RocketMQ拉取消息,并根据消息执行业务的应用程序
- 代理服务器Broker:实际和消费生产者、消息消费者进行交互的程序,主要进行消息的存储、消息的推送,一般从性能考虑,会对消息进行集群
- 命名服务NameServer:代理服务器Broker在启动的时候注册信息到NameServer中,消息生产者和消息消费者启动的时候从NameServer拉取Broker的IP和端口,消息生产者应用程序和消息消费者的应用程序会和Broker建立长链接(基于Netty),发送消息和消费消息都是基于长链接的通道
- 主题Topic:划分不同类型的消息,比如订单消息发送到OrderTopic,会员消息发送到MemberTopic
- 消息队列MessageQueue:在Topic内部,专门进行消息的存储的地方,最底层存储的数据结构(默认一个Topic中有4个MessageQueue)
- 消息Message:在消息生产者给RocketMQ发送消息的时候,需要将传递的参数封装到Message对象中,通过网络传输到RocketMQ,消息会存储在MessageQueue中
- 标签Tag:可以在发送的时候给消息添加标签Tag,消费者可以通过标签Tag进行过滤
简单使用
引入jar包
<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.9.5</version>
</dependency>
生产者
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;public class SimpleProducer {public static void main(String[] args) throws Exception{//定义消费的生产者对象DefaultMQProducer producer = new DefaultMQProducer("helloProducerGroup");//定义nameServer地址producer.setNamesrvAddr("127.0.0.1:9876");//自动连接(从nameServer拉取broker地址,并且建立连接)producer.start();//定义消息发送的目的地TopicString topic = "helloTopic";for(int i=0;i<10;i++){//定义消息Message message = new Message(topic,("helloTopic的消息=="+i).getBytes());//发送消息SendResult result = producer.send(message);//输出消息储存的结果System.out.println("消息存储的状态:"+result.getSendStatus());System.out.println("消息存储的消息ID:"+result.getMsgId());}//关闭连接producer.shutdown();}
}
消费者
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;public class SimpleConsumer {public static void main(String[] args) throws Exception {//定义消息的消费者DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("helloConsumerGroup");//定义nameServer地址consumer.setNamesrvAddr("127.0.0.1:9876");//定义消费的主题String topic = "helloTopic";//监听该主题消息consumer.subscribe(topic,"*");//设置消息监听器,服务器把消息推送给我们,消费消息consumer.setMessageListener((MessageListenerConcurrently) (list, consumeConcurrentlyContext) -> {for(MessageExt messageExt:list){System.out.println("处理的线程:"+Thread.currentThread()+",消息内容:"+new String(messageExt.getBody()));}//告诉消息中间件,消息处理的情况return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;});consumer.start();}
}
相关文章:
RocketMQ学习笔记(一)
RocketMQ学习笔记 消息中间件应用场景 应用解耦削峰填谷数据分发 常见的消息中间件 ActiveMQ:Apache出品,比较老的一个开源的消息中间件,以前在中小企业应用广泛Kafka:Apache软件基金会开发的一个开源流处理平台,由…...
JavaScript-2-菜鸟教程
字符串 可以使用 索引 位置访问字符串中的每个字符 可以使用内置属性 length 来计算字符串的长度 var txt "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var sln txt.length;<script>var x "John"; // x是一个字符串// 使用 new 关键字将字符…...
发布开源项目到 jitpack
--- theme: github highlight: a11y-dark --- # 发布项目到 jitpack ## *(Gradle7.x 的版本已不适用 android-maven 的方法发布)* ## 1.在要发布android module下的 build.grdle 添加,多个module就添加多个 plugins{ id maven-publish } task sourceJar(type: Jar) { …...
TeeChart for .NET 2023.10.19 Crack
TeeChart.NET 的 TeeChart 图表控件提供了一个出色的通用组件套件,可满足无数的图表需求,也针对重要的垂直领域,例如金融、科学和统计领域。 数据可视化 数十种完全可定制的交互式图表类型、地图和仪表指示器,以及完整的功能集&am…...
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球 文章链接:柠檬水找零 根据身高重建队列 用最少数量的箭引爆气球 视频链接:柠檬水找零 根据身高重建队列 …...
完美解决configure: error: APR not found. Please read the documentation.
目录 一、问题: 二、原因: 三、解决方法: 一、问题: ./configure 出现如下问题: configure: error: APR not found. Please read the documentation. 二、原因: 配置:错误:找不…...
Jenkins部署失败:JDK ‘jdk1.8.0_381‘ not supported to run Maven projects
Jenkins部署报错:JDK ‘jdk1.8.0_381’ not supported to run Maven projects提示使用的jdk有问题,启动的jdk版本不能满足项目启动。 登录Jenkins管理页面,系统管理——全局工具配置——JDK安装配置满足条件的JDK版本,保存配置&…...
xml导出pdf简单实现
1. 引入依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>8.0.1</version> </dependency>2. 代码实现 import com.itextpdf.kernel.geom.PageSize; import com.itextpdf.ker…...
JAVAEE初阶相关内容第十六弹--网络编程
写在前 这一节的内容首先是对十五弹(UDP回显服务器)进行简单的改进,在这基础上开始介绍TCP流套接字编程。 目录 写在前 1.改进回显服务器 1.1完整代码实现 1.2运行输出结果 2.TCP流套接字编程 2.1ServerSocketAPI 2.2SocketAPI 3.TC…...
Python---练习:使用for循环嵌套实现打印九九乘法表
思考: 外层循环主要用于控制循环的行数,内层循环用于控制列数。 基本语法: # 外层循环 for i in 序列1:# 内层循环for j in 序列2:循环体 序列1 序列2 ,就可以是range(1, 10) -----也就是从1,到9。 参考while循环…...
mac安装并使用wireshark
mac安装并使用wireshark 1 介绍 我们在日常开发过程中,遇到了棘手的问题时,免不了查看具体网络请求情况,这个时候就需要用到抓包工具。比较著名的抓包工具就属:wireshark、fildder。我这里主要介绍wireshark。 2 安装 以mac安装为…...
torch张量的降维与升维
文章目录 一、降维和升维未完待续.... 一、降维和升维 squeeze和unsqueeze是torch张量常用的降维与升维的一种方式,但这种方式只能增添或减少大小为1的维度,如下: x1 torch.randn(1, 8, 256, 256) x1 torch.squeeze(x1,dim0) print(x1.sh…...
八大排序算法(C语言版)之插入排序
八大排序详解 目录:一、排序的概念1.1 排序的概念1.2 排序的应用 二、直接插入排序三、希尔排序四、排序算法复杂度及稳定性分析 目录: 八大排序算法: #mermaid-svg-7qCaGEYz0Jyj9dYw {font-family:"trebuchet ms",verdana,arial,…...
Linux系统安装redis并配置为服务
一、Linux环境 1、下载 官网提供的源码下载地址: https://github.com/redis/redis/archive/7.0.5.tar.gz 2、将源码上传至服务器 3、解压缩 # 将解压缩后的文件放置在同目录的source文件夹下 tar -zxvf redis-7.0.5.tar.gz -C ./source4、编译安装 对源码进行编…...
DDIO和DMA有什么区别
DDIO 和 DMA 的区别 DDIO (Data Direct I/O Technology) 主要应用: 主要用于网卡和CPU之间的数据传输。工作原理: 通过CPU的Last Level Cache (LLC) 直接与外部网卡交换数据,绕过了主存储器。优点: 减少了CPU和网卡等待内存的时间。提高了数据包的处理速度。减少了…...
【MATLAB源码-第58期】基于蛇优化算法(SO)和粒子群优化算法(PSO)的栅格地图路径规划最短路径和适应度曲线对比。
操作环境: MATLAB 2022a 1、算法描述 粒子群算法 (Particle Swarm Optimization, PSO) 1. 算法概述 粒子群算法是一种基于群体智能的优化算法,模拟鸟群觅食的行为。算法中的每个粒子代表问题的一个可能解,并且具有位置和速度两个属性。粒…...
nlp与知识图谱代码解读
词嵌入 简单原理 我们要给一群14岁的孩子讲解词嵌入。可以使用一些比喻和生活中的例子: 老师: 你们还记得玩乐高积木的时候,每个积木块代表了一个特定的事物或形状吗?现在,想象一下,每个词都像是一个乐高…...
Redis设计与实现(3)字典
Redis的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每一个哈希表节点就保存了字典中的一个键值对 redis字典所使用的哈希表由dict.h/dictht typedef struct dictht{//哈希表数组dictEntry **table;//哈希表大小unsigned long si…...
STM32MP157D BSP
一,全志R16、IMX6ULL和STM32MP157D启动相关 1,IMX6ULL是EMMC启动后,通过uboot fat命令的load进内存进行启动测试 2,openedv应该也是参考的官方的板子,类似调试口等均应该是一致的,所以目前就是用正点原子…...
最新SQL注入漏洞修复建议
点击星标,即时接收最新推文 本文选自《web安全攻防渗透测试实战指南(第2版)》 点击图片五折购书 SQL注入漏洞修复建议 常用的SQL注入漏洞的修复方法有两种。 1.过滤危险字符 多数CMS都采用过滤危险字符的方式,例如&…...
深度解析RPA格式:如何用unrpa突破Ren‘Py游戏资源的技术壁垒
深度解析RPA格式:如何用unrpa突破RenPy游戏资源的技术壁垒 【免费下载链接】unrpa A program to extract files from the RPA archive format. 项目地址: https://gitcode.com/gh_mirrors/un/unrpa 当你面对一个RenPy引擎开发的视觉小说游戏,想要…...
迪卡侬集团2025年净销售额同比增长4.0%至168亿欧元
、美通社消息:2025年,面对瞬息万变的市场环境,迪卡侬集团展现出稳健的经营韧性与持续的战略定力,整体经营表现稳步向好,以当地货币计算,商品交易总额(GMV)同比增长7.1%,净销售额同比增长5.6%&am…...
3分钟搞定!BaiduPCS-Web免费解锁百度网盘满速下载终极方案
3分钟搞定!BaiduPCS-Web免费解锁百度网盘满速下载终极方案 【免费下载链接】baidupcs-web 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcs-web 还在为百度网盘下载速度慢如蜗牛而烦恼吗?每次下载大文件都要等上几个小时甚至一整天&#…...
保姆级教程:用Python脚本一键划分LS-SSDD-v1.0数据集(附近岸/离岸测试集处理)
Python自动化处理LS-SSDD数据集:从混乱到规范的完整指南 当你第一次打开LS-SSDD-v1.0数据集时,面对24,00016,000像素的大图和9000张800800的小图,以及各种划分文件,可能会感到无从下手。这份数据集虽然为SAR图像中的小舰船检测提供…...
Qwen-Image-Edit-F2P实战:QT图形界面开发指南
Qwen-Image-Edit-F2P实战:QT图形界面开发指南 1. 学习目标与前置准备 今天咱们来聊聊怎么用QT给Qwen-Image-Edit-F2P模型做个图形界面。这个模型挺有意思的,它能根据一张人脸照片生成全身像,比如你把自拍照传进去,它能给你生成在…...
猫抓扩展专业配置指南:提升资源嗅探效率的四大核心策略
猫抓扩展专业配置指南:提升资源嗅探效率的四大核心策略 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(cat-catch)作为一款强大的…...
AI服务的可观测性与运维
AI服务的可观测性与运维 当 AI 服务从开发环境走向生产,可观测性(Observability)成为运维的基石。传统的监控(CPU、内存、请求量)已不足以应对 AI 系统的复杂性,我们需要深入追踪 每个 AI 交互的细节&#…...
5种手柄映射方案让手游玩家实现主机级操控体验
5种手柄映射方案让手游玩家实现主机级操控体验 【免费下载链接】escrcpy 📱 Display and control your Android device graphically with scrcpy. 项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy 手机游戏操控优化一直是困扰玩家的核心痛点&…...
霜儿-汉服-造相Z-Turbo入门必看:从零启动到生成高清古风人像全流程
霜儿-汉服-造相Z-Turbo入门必看:从零启动到生成高清古风人像全流程 想亲手生成一张充满诗意的古风汉服人像吗?比如,一位身着月白霜花刺绣汉服的少女,在江南庭院的白梅树下,气质清冷,宛如从画中走来。这听起…...
3大跨平台游戏开发库部署方案:从环境搭建到性能优化的全流程指南
3大跨平台游戏开发库部署方案:从环境搭建到性能优化的全流程指南 【免费下载链接】raylib A simple and easy-to-use library to enjoy videogames programming 项目地址: https://gitcode.com/GitHub_Trending/ra/raylib 跨平台游戏开发库raylib凭借其轻量级…...
