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

RocketMQ学习笔记(一)

RocketMQ学习笔记

消息中间件应用场景

  • 应用解耦
  • 削峰填谷
  • 数据分发

常见的消息中间件

  • ActiveMQ:Apache出品,比较老的一个开源的消息中间件,以前在中小企业应用广泛
  • Kafka:Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统。
  • RabbitMQ:基于erlang语言开发的消息中间件,RabbitMQ最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。适用于对数据的一致性、稳定性和可靠性要求比较高的场景
  • RocketMQ:高性能、低延时和高可靠性等特性

消息中间件对比

KafkaRocketMQRabbitMQ
定位日志消息、监控数据非日志的可靠消息传输非日志的可靠消息传输
可用性非常高、分布式、主从非常高、分布式、主从高、主从、采用镜像模式实现,数据量大时可能有性能问题
消息可靠性异步刷盘,容易丢数据同步刷盘、异步刷盘同步刷盘
单机吞吐量百万级十万级万级
堆积能力非常好非常好一般
顺序消费支持,一台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&#xff1a;Apache出品&#xff0c;比较老的一个开源的消息中间件&#xff0c;以前在中小企业应用广泛Kafka&#xff1a;Apache软件基金会开发的一个开源流处理平台&#xff0c;由…...

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 图表控件提供了一个出色的通用组件套件&#xff0c;可满足无数的图表需求&#xff0c;也针对重要的垂直领域&#xff0c;例如金融、科学和统计领域。 数据可视化 数十种完全可定制的交互式图表类型、地图和仪表指示器&#xff0c;以及完整的功能集&am…...

代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球

代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球 文章链接&#xff1a;柠檬水找零 根据身高重建队列 用最少数量的箭引爆气球 视频链接&#xff1a;柠檬水找零 根据身高重建队列 …...

完美解决configure: error: APR not found. Please read the documentation.

目录 一、问题&#xff1a; 二、原因&#xff1a; 三、解决方法&#xff1a; 一、问题&#xff1a; ./configure 出现如下问题&#xff1a; configure: error: APR not found. Please read the documentation. 二、原因&#xff1a; 配置&#xff1a;错误&#xff1a;找不…...

Jenkins部署失败:JDK ‘jdk1.8.0_381‘ not supported to run Maven projects

Jenkins部署报错&#xff1a;JDK ‘jdk1.8.0_381’ not supported to run Maven projects提示使用的jdk有问题&#xff0c;启动的jdk版本不能满足项目启动。 登录Jenkins管理页面&#xff0c;系统管理——全局工具配置——JDK安装配置满足条件的JDK版本&#xff0c;保存配置&…...

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初阶相关内容第十六弹--网络编程

写在前 这一节的内容首先是对十五弹&#xff08;UDP回显服务器&#xff09;进行简单的改进&#xff0c;在这基础上开始介绍TCP流套接字编程。 目录 写在前 1.改进回显服务器 1.1完整代码实现 1.2运行输出结果 2.TCP流套接字编程 2.1ServerSocketAPI 2.2SocketAPI 3.TC…...

Python---练习:使用for循环嵌套实现打印九九乘法表

思考&#xff1a; 外层循环主要用于控制循环的行数&#xff0c;内层循环用于控制列数。 基本语法&#xff1a; # 外层循环 for i in 序列1:# 内层循环for j in 序列2:循环体 序列1 序列2 &#xff0c;就可以是range(1, 10) -----也就是从1&#xff0c;到9。 参考while循环…...

mac安装并使用wireshark

mac安装并使用wireshark 1 介绍 我们在日常开发过程中&#xff0c;遇到了棘手的问题时&#xff0c;免不了查看具体网络请求情况&#xff0c;这个时候就需要用到抓包工具。比较著名的抓包工具就属&#xff1a;wireshark、fildder。我这里主要介绍wireshark。 2 安装 以mac安装为…...

torch张量的降维与升维

文章目录 一、降维和升维未完待续.... 一、降维和升维 squeeze和unsqueeze是torch张量常用的降维与升维的一种方式&#xff0c;但这种方式只能增添或减少大小为1的维度&#xff0c;如下&#xff1a; x1 torch.randn(1, 8, 256, 256) x1 torch.squeeze(x1,dim0) print(x1.sh…...

八大排序算法(C语言版)之插入排序

八大排序详解 目录&#xff1a;一、排序的概念1.1 排序的概念1.2 排序的应用 二、直接插入排序三、希尔排序四、排序算法复杂度及稳定性分析 目录&#xff1a; 八大排序算法&#xff1a; #mermaid-svg-7qCaGEYz0Jyj9dYw {font-family:"trebuchet ms",verdana,arial,…...

Linux系统安装redis并配置为服务

一、Linux环境 1、下载 官网提供的源码下载地址&#xff1a; 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) 直接与外部网卡交换数据&#xff0c;绕过了主存储器。优点: 减少了CPU和网卡等待内存的时间。提高了数据包的处理速度。减少了…...

【MATLAB源码-第58期】基于蛇优化算法(SO)和粒子群优化算法(PSO)的栅格地图路径规划最短路径和适应度曲线对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 粒子群算法 (Particle Swarm Optimization, PSO) 1. 算法概述 粒子群算法是一种基于群体智能的优化算法&#xff0c;模拟鸟群觅食的行为。算法中的每个粒子代表问题的一个可能解&#xff0c;并且具有位置和速度两个属性。粒…...

nlp与知识图谱代码解读

词嵌入 简单原理 我们要给一群14岁的孩子讲解词嵌入。可以使用一些比喻和生活中的例子&#xff1a; 老师&#xff1a; 你们还记得玩乐高积木的时候&#xff0c;每个积木块代表了一个特定的事物或形状吗&#xff1f;现在&#xff0c;想象一下&#xff0c;每个词都像是一个乐高…...

Redis设计与实现(3)字典

Redis的字典使用哈希表作为底层实现&#xff0c;一个哈希表里面可以有多个哈希表节点&#xff0c;而每一个哈希表节点就保存了字典中的一个键值对 redis字典所使用的哈希表由dict.h/dictht typedef struct dictht{//哈希表数组dictEntry **table;//哈希表大小unsigned long si…...

STM32MP157D BSP

一&#xff0c;全志R16、IMX6ULL和STM32MP157D启动相关 1&#xff0c;IMX6ULL是EMMC启动后&#xff0c;通过uboot fat命令的load进内存进行启动测试 2&#xff0c;openedv应该也是参考的官方的板子&#xff0c;类似调试口等均应该是一致的&#xff0c;所以目前就是用正点原子…...

最新SQL注入漏洞修复建议

点击星标&#xff0c;即时接收最新推文 本文选自《web安全攻防渗透测试实战指南&#xff08;第2版&#xff09;》 点击图片五折购书 SQL注入漏洞修复建议 常用的SQL注入漏洞的修复方法有两种。 1&#xff0e;过滤危险字符 多数CMS都采用过滤危险字符的方式&#xff0c;例如&…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...