RocketMQ快速入门

RocketMQ的发展历史

Apache RocketMQ 是一个开源的分布式消息中间件系统,最初由阿里巴巴集团开发并于2016年贡献给 Apache 软件基金会。以下是 RocketMQ 的发展历史的主要里程碑:

  1. 2012年:阿里巴巴内部项目

    • RocketMQ 最初是阿里巴巴内部的一个消息中间件项目,用于满足阿里巴巴集团内部的消息传递需求。

  2. 2016年5月:贡献给 Apache 软件基金会

    • 阿里巴巴宣布将 RocketMQ 开源并贡献给 Apache 软件基金会,成为 Apache 孵化器项目(Incubator)的一部分。

  3. 2017年11月:成为 Apache 顶级项目

    • RocketMQ 成为 Apache 顶级项目(Top-Level Project),标志着它已成为一个成熟的开源项目。

RocketMQ和Kafka

RocketMQ 和 Apache Kafka 都是开源的分布式消息中间件系统,它们用于实现高可靠性、高吞吐量的消息传递,RocketMQ的核心设计借鉴了Kafka,两者之间存在相似之处。

1. 发展历史:

  • RocketMQ 最初由阿里巴巴开发,后来贡献给 Apache 软件基金会。

  • Kafka 由LinkedIn开发,后来成为了Apache软件基金会的顶级项目。

2. 数据模型:

  • RocketMQ 使用主题(Topic)和标签(Tag)来组织消息。消息可以按主题进行分组,标签可以用来进一步过滤消息。

  • Kafka 使用主题(Topic)来组织消息。消息被发布到主题,消费者可以订阅主题来接收消息。

3. 存储机制:

  • RocketMQ 使用可定制的存储引擎来存储消息,默认使用的是 Apache RocketMQ Store。

  • Kafka 使用分布式文件系统(如 Apache Hadoop HDFS)来存储消息。

4. 消费模型:

  • RocketMQ 支持消息广播和集群模式。消息广播模式允许多个消费者同时接收相同的消息,而集群模式确保每个消息只有一个消费者接收。

  • Kafka 使用发布-订阅模型,其中每个主题的消息可以被多个消费者订阅。

5. 消费者偏移:

  • RocketMQ 使用消费者组概念,允许多个消费者协同消费消息。RocketMQ会跟踪每个消费者组的消费进度。

  • Kafka 使用偏移量(offset)来跟踪每个消费者的进度。消费者需要自己维护偏移量。

6. 消息保证:

  • RocketMQ 提供了严格有序消息传递的支持,可以用于需要严格的消息顺序性的场景。

  • Kafka 提供至少一次交付保证,但在某些情况下可能出现消息重复或乱序。

快速上手RocketMQ

简要介绍如何安装单机版的RocketMQ,以及简单地收发消息。

1.下载RocketMQ

地址下载 | RocketMQ,选择Binary下载的原因是Binary版本是一些编译好的jar和辅助的shell脚本。

2.解压缩

使用FinalShell远程连接工具上传下载好的压缩包,存放路径在usr/local/rocketmq,把压缩包解压到目录下。

# 创建文件夹目录
cd /usr/local/
mkdir rocketmq
# 解压,我下上传是rocketmq-all-5.1.3-bin-release.zip
unzip rocketmq-all-5.1.3-bin-release.zip 

3.启动消息队列服务

单机的消息队列服务比较简单,不需要配置,一次启动NameServer和Broker就行。建议使用后台启动的方式。

#进入RocketMQ的bin目录下
cd rocketmq-all-5.1.3-bin-release/bin/
#后台启动NameServer
zookeeper-server-start.sh
#查看NameServer启动日志
tail -f ~/logs/rocketmqlogs/namesrv.log
#后台启动Broker
zookeeper-server-stop.sh
#查看Broker启动日志
tail -f ~/logs/rocketmqlogs/broker.log

4.内存不足启动报错

查看Broker启动日志,提示找不到文件,那就查看当前目录下的nohup.out。

如果报错“There is insufficient memory for the Java Runtime Environment to continue.”,那就是RocketMQ启动内存不足导致的。

解决方案

找到 runserver.shrunbroker.sh 以及 tools.sh 修改下 JAVA_OPT 的参数,都在JVM Configuration下面

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

对应参数说明

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512g" 
Xms 是指设定程序启动时占用内存大小。一般来讲,大点,程序会启动的快一点,但是也可能会导致机器暂时
间变慢。
Xmx 是指设定程序运行期间最大可占用的内存大小。如果程序运行需要占用更多的内存,超出了这个设置值, 
就会抛出OutOfMemory异常。
xmn 年轻代的heap大小,一般设置为Xmx的3、4分之一

保存修改后,重新启动namesrv和broker就可以了。

5.停止服务,建议先停止broker,然后停止namesrv

  • 停止Broker

    sh mqshutdown broker
  • 停止NameSrv

    sh mqshutdown namesrv

简单示例

以下是一个简单的 Java 示例,演示如何使用 Apache RocketMQ 发送和接收消息。在运行这个示例之前,确保已经设置好 RocketMQ 环境并正确配置了生产者和消费者。

发送消息的生产者示例:

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message;
​
public class RocketMQProducer {public static void main(String[] args) throws Exception {// 创建生产者实例DefaultMQProducer producer = new DefaultMQProducer("producer_group");producer.setNamesrvAddr("localhost:9876");
​// 启动生产者producer.start();
​// 创建消息Message message = new Message("topic_name", "tag_name", "Hello, RocketMQ".getBytes());
​// 发送消息producer.send(message);
​// 关闭生产者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 RocketMQConsumer {public static void main(String[] args) throws Exception {// 创建消费者实例DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer_group");consumer.setNamesrvAddr("localhost:9876");
​// 订阅消息主题和标签consumer.subscribe("topic_name", "*");
​// 注册消息监听器consumer.registerMessageListener(new MessageListenerConcurrently() {@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> messages, ConsumeConcurrentlyContext context) {for (MessageExt message : messages) {System.out.println("Received message: " + new String(message.getBody()));}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}});
​// 启动消费者consumer.start();
​System.out.println("Consumer started");}
}

在上述示例中,生产者向名为 "topic_name" 的主题发送消息,而消费者订阅相同的主题,并通过消息监听器接收并处理消息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/173299.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud 微服务全栈体系(四)

第六章 Nacos 配置管理 Nacos 除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 一、统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我们需要一种统一配置管理方案…

Day 11 python学习笔记

模块 内置模块 random random&#xff1a;随机数模块 我们可以在解释器中看到其蕴含的方法 接下来我解释一些常用的方法&#xff1a; random.random( ) random.random( ) 返回0-1的随机数 [0,1) >>> random.random() 0.364183511476754 random.randint(n,m) r…

KNN-水仙花的分类

题目&#xff1a; 思路&#xff1a; 1、处理数据集&#xff0c;这里用的是题目已知的数据集&#xff0c;所以说需要提前将写好的数据放到excel表格里&#xff0c;再进行读取。 2、将数据集划分为训练集和测试集 3、定义K-NN模型。 4、训练模型 5、预测模型 6、计算分类精…

centos7虚拟机部署苍穹私有云环境记录

物理机建议16G内存以上&#xff0c;不然安装gpass过程中带不动虚拟机 步骤1&#xff1a;迅雷下载centos7.9镜像文件&#xff0c;并创建虚拟机&#xff0c;手动安装 http://ftp.sjtu.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso 后面安装gpass时会有校验…

Gerrit | 重磅! 2.x 版本升级到 3.x 版本----转

Gerrit | 重磅! 2.x 版本升级到 3.x 版本 为什么要做版本升级&#xff1f; 2.x known bugs 重大问题不一一列举&#xff0c;这里仅仅是举几个例子&#xff1a; 安全或权限问题&#xff1a;普通用户能看到敏感数据&#xff0c;例如看到其他用户的 hashed api 密码&#xff0c…

conda虚拟环境笔记收录

1、安装conda 增加执行权限&#xff1a; chmod x Anaconda3-2023.03-1-Linux-x86_64.sh 开始执行&#xff1a;./Anaconda3-2023.03-1-Linux-x86_64.sh2、查看版本 conda --version3、查看当前虚拟环境 虚拟环境和全局环境有前缀可见 如果不进行设置&#xff0c;重新启动就变成…

轻量级仿 Spring Boot=嵌入式 Tomcat+Spring MVC

啥&#xff1f;Spring Boot 不用&#xff1f;——对。就只是使用 Spring MVC Embedded Tomcat&#xff0c;而不用 Boot。为啥&#xff1f;——因为 Boot 太重了&#xff1a;&#xff09; 那是反智吗&#xff1f;Spring Boot 好好的就只是因为太重就不用&#xff1f;——稍安勿…

一、PHP环境搭建[phpstorm]

一、安装 1.php编写工具 地址&#xff1a;https://www.jetbrains.com/phpstorm/download/#sectionwindows 图示&#xff1a; 2.php环境 解释&#xff1a;建议使用phpstudy进行安装&#xff0c;安装较为简单 链接&#xff1a;https://www.xp.cn/ 图示&#xff1a; 二、第…

企业年度经营计划预算最全攻略来了!附年度费用预算表格模板

经营分析里最重要&#xff0c;也最让人头大的部分&#xff0c;莫过于制定经营计划。现实中很多企业因为制定年度经营预算费用不善&#xff0c;导致年度经营计划与预算脱节&#xff0c;年度计划成了摆设…… 年度费用预算表 为了摆脱企业年度经营与发展&#xff0c;并作出科学合…

shell语法大全(超级详细!!!!),非常适合入门

本文旨在对y总的Linux基础课shell语法做学习记录&#xff0c;指令较多&#xff0c;方便日后查找。 参考视频&#xff1a;Linux基础课 参考教程&#xff1a;Linux教程 1 概论 Linux中常见的shell脚本有很多种&#xff0c;常见的有&#xff1a; Bourne Shell(/usr/bin/sh或/bi…

openEuler 22.03 x86架构下docker运行arm等架构的容器——筑梦之路

为什么要这样做&#xff1f; 随着国产化的普及&#xff0c;国家政策对信创产业的支持&#xff0c;尤其一些金融证券行业、政府单位等&#xff0c;逐渐开始走国产化信创的路线&#xff0c;越来越多接触到国产 CPU &#xff08;arm 平台&#xff0c;比如华为的鲲鹏处理器&#xf…

区块链物联网中基于属性的私有数据共享与脚本驱动的可编程密文和分散密钥管理

Attribute-Based Private Data Sharing With Script-Driven Programmable Ciphertext and Decentralized Key Management in Blockchain Internet of Things 密钥生成算法 第 1 步&#xff1a;对于属性集A 的用户IDk&#xff0c;他首先将属性集A发送给Pi并且计算 &#xff0c…

docker的安装部署nginx和mysql

小白自己整理&#xff0c;如有错误请指示&#xff01; 自我理解&#xff1a;docker就是把应用程序所用的依赖程序&#xff0c;函数库等相关文件打包成镜像文件&#xff0c;类似系统光盘&#xff0c;然后可以在任意电脑上安装使用&#xff08;方便运维人员部署程序&#xff09;…

MySQL启动后反复重新启动故障

MySQL版本为5.6.45 系统为Ubuntu 20.04 LTS 该服务器重启后&#xff0c;MySQL需要手动执行启动。 运行执行脚本后发现异常&#xff0c;如下图&#xff1a; 提示MySQL服务在不停重复启动。 反复使用ps -ef |grep mysql命令查看&#xff0c;发现mysql进程号一直在变化&#x…

『阿里云盘 AList Kodi』家庭影院搭建指南

文章目录 前言AList简介安装相关命令获取密码 阿里云盘Kodi安装 参考链接 前言 之前我们使用简易 Python 框架搭建部署了私人影院&#xff0c;但是部分小伙伴们表示对于个人使用来说比较复杂&#xff0c;这次将会带来更加适合个人使用&#xff0c;并且部署更加简单的 阿里云盘…

【uniapp】短信验证码输入框

需求是短信验证码需要格子输入框 如图 网上找了一个案例改吧改吧 直接上代码 结构 <template><view class"verify-code"><!-- 输入框 --><input id"input" :value"code" class"input" :focus"isFocus"…

加解密原理(HCIA)

一、加密技术 1、加密的两个核心组件 2、加密技术作用&#xff1a; 二、加解密技术原理 1、对称加密 2、非对称加密 &#xff08;1&#xff09;思考问题&#xff1f; 1&#xff09;、有了非对称加密为什么还用对称加密&#xff1f; 2&#xff09;、如何传递秘钥呢&…

C++标准模板(STL)- 类型支持 (类型特性,is_union,is_class,is_function)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实例…

Docker 入门

What - 什么是容器 容器是一种轻量级、可移植、自包含的软件打包技术&#xff0c;使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器&#xff0c;无须任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。容器与虚拟机谈…

尚硅谷大数据项目《在线教育之实时数仓》笔记004

视频地址&#xff1a;尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili 目录 第8章 数仓开发之DIM层 P024 P025 P026 P027 P028 P029 P030 第8章 数仓开发之DIM层 P024 package com.atguigu.edu.realtime.app.func;import com.alibaba.druid.pool.DruidDat…