搭建RocketMq(超详细,图文并茂)

2023-11-16

环境:

jdk 1.8

rocketMq 版本 4.5.1 rocketmq-all-4.5.1-bin-release.zip

附上链接,小伙伴自行下载

链接:https://pan.baidu.com/s/1zyzF3uZ3YN0YWzcLtkHC8A 
提取码:gege 
 

1,拷贝到对应的文件夹

1.1 解压文件

unzip rocketmq-all-4.5.1-bin-release.zip

1.2 修改名称为rocketmq

mv rocketmq-all-4.5.1-bin-release.zip rocketmq

2,启动mq

2.1启动nameserver

进入bin目录,输入

nohup ./mqnamesrv &

2.2启动broker

nohup  sh mqbroker -n localhost:9876 > /app/soft/rocketMq/rocketmq/bin/log_broker.log 2>&1 &

#1、backupdb.log为日志保存输出的文件名称;
#2、2>&1表示不仅命令行正常的输出保存到backupdb.log中,产生错误信息的输出也保存到backupdb.log中;
#3、&表示该进程在后台运行;
#4、nohup表示进程在当用户注销(logout)或网络断开时不会被终止
#注意:若不指定输出日志文件,缺省会输出到nohup.out文件中.

-n 代表本机 nameserver的地址和端口号

2.3关闭服务

关闭namesrv服务:sh bin/mqshutdown namesrv

./mqshutdown namesrv

关闭broker服务 :sh bin/mqshutdown broker

./mqshutdown broker

3.测试

3.1测试消费端

 export NAMESRV_ADDR=localhost:9876 && ./tools.sh org.apache.rocketmq.example.quickstart.Consumer

启动报错:

3.2修复错误

上面报错是因为rocket配置给的内存太大,虚拟机分配的内存太小导致。所以要修改bin目录下tools.sh,runserver.sh,runbroker.sh三个文件。

 vi runserver.sh,修改第一行,内存改小点。

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

#===========================================================================================
# JVM Configuration
#==========================================================================================
#JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8  -XX:-UseParNewGC"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc.log -XX:+PrintGCDetails"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT}  -XX:-UseLargePages"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

 vi runbroker.sh,也是修改第一行,内存改小点。

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m"


#===========================================================================================
# JVM Configuration
#==========================================================================================
#JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"

vi tools.sh

#===========================================================================================
# JVM Configuration
#===========================================================================================
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:PermSize=128m -XX:MaxPermSize=320m"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre/lib/ext"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

3.3重新启动

export NAMESRV_ADDR=localhost:9876 设置nameserver的地址 防止找不到

3.4测试生产者

export NAMESRV_ADDR=localhost:9876 && ./tools.sh org.apache.rocketmq.example.quickstart.Producer

 发送了这么多条,可以看到消费端也开始打印

 完成

遇到的错误排查:

1,java启动producer

public class MyProducer {

    public static void main(String[] args) throws UnsupportedEncodingException, InterruptedException, RemotingException, MQClientException, MQBrokerException {
        // 在实例化生产者的同时,指定了生产组名称
        DefaultMQProducer producer = new DefaultMQProducer("myproducer_grp_01");
        //设置超时时间
        producer.setSendMsgTimeout(150000);
        // 指定NameServer的地址
        producer.setNamesrvAddr("192.168.235.100:9876");
        // 对生产者进行初始化,然后就可以使用了
        producer.start();

        // 创建消息,第一个参数是主题名称,第二个参数是消息内容
        Message message = new Message(
                "tp_demo_01",
                "hello lagou 01".getBytes(RemotingHelper.DEFAULT_CHARSET)
        );
        // 发送消息
        final SendResult result = producer.send(message);
        System.out.println(result);

        // 关闭生产者
        producer.shutdown();
    }


}

 解决办法:

进入conf下面的broker.conf文件,并编辑

vim broker.conf

在conf文件中加入两行(建议直接复制,然后再修改为自己的IP),一定是大写IP!!!!!

namesrvAddr=127.0.0.1:9876
brokerIP1=192.168.200.130#是大写的IP一定要注意!!!修改成自己的IP地址!不能用localhost和127代替本机

1,一定要先启动namesrv,因为消息服务器是注册到命名服务器上的,不先启动命名服务器怎么注册

2,再启动消息服务器,同时指定刚刚修改过的conf文件,不然还是会读取原本默认的阿里外网IP,还是会报错。

./mqbroker -n localhost:9876 -c ../conf/broker.conf

启动成功如下图

2,出现MQClientException: No route info of this topic错误:

异常产生的原因可能是:

1,Broker禁止自动创建Topic,且用户没有通过手工方式创建Topic

2,Broker没有正确连接到Name Server
3,Producer没有正确连接到Name Server 

首先解决1这种情况,启动顺序要先启动nameserver,再启动broker,启动broker时加上autoCreateTopicEnable=true 

./mqbroker -n localhost:9876 autoCreateTopicEnable=true 

解决2这种情况,启动没有异常检查下nameserver中是否成功注册了broker,有两种方式 
看broker的日志 如果出现形如
2018-02-28 16:21:35 INFO BrokerControllerScheduledThread1 - register broker to name server 192.168.192.129:9876 OK
2018-02-28 16:22:05 INFO BrokerControllerScheduledThread1 - register broker to name server 192.168.192.129:9876 OK
证明已经连接到nameserver上;

如果按前两步检查没有问题,但启动还是报错,那么剩下的可能原因是producer无法连接到nameserver,很可能是防火墙的原因 ,要检验猜测只需要关闭防火墙,命令为systemctl stop firewalld.service
然后再次验证,应该已经可以使用了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

搭建RocketMq(超详细,图文并茂) 的相关文章

  • Guice 忽略注入构造函数参数上的 @Nullable

    我正在使用 Guice v 3 0 并且有一个值被注入到构造函数中 该值可以为 null 因此我在构造函数中使用 Nullable 来自 javax annotations 注释了该参数 public MyClass Parameter1
  • 获取文件的锁

    我想在对特定文件开始 threo read 时获取文件上的锁定 以便其他应用程序无法读取已锁定的文件并希望在线程终止时释放锁定文件 您可以获得一个FileLock https docs oracle com javase 8 docs ap
  • FileNotFoundException - Struts2 文件上传

    Strange FileNotFoundException使用Struts2上传文件时 这是 JSP 的一部分
  • 为自定义驱动程序创建 GraphicsDevice

    我正在开发一个在嵌入式系统中使用 Java 的项目 我有用于屏幕和触摸输入的驱动程序 以及用于文本输入的虚拟键盘 我的屏幕驱动程序有一个Graphics2D您可以绘制的对象和repaint Rectangle 更新方法 类似地 触摸驱动器能
  • Android蓝牙java.io.IOException:bt套接字已关闭,读取返回:-1

    我正在尝试编写一个代码 仅连接到运行 Android 5 0 KitKat 的设备上的 目前 唯一配对的设备 无论我尝试了多少方法 我仍然会收到此错误 这是我尝试过的最后一个代码 它似乎完成了我看到人们报告为成功的所有事情 有人能指出我做错
  • 虽然我的类已加载,但 Class.forName 抛出 ClassNotFoundException

    代码如下 它的作用是加载我放在主目录中的 jar 文件中的所有类 import java io File import java util jar JarFile import java util jar JarEntry import j
  • 在 Java 中通过 XSLT 分解 XML

    我需要转换具有嵌套 分层 表单结构的大型 XML 文件
  • Java、Spring:使用 Mockito 测试 DAO 的 DataAccessException

    我正在尝试增加测试覆盖率 所以我想知道 您将如何测试 DAO 中抛出的 DataAccessExceptions 例如在一个简单的 findAll 方法中 该方法仅返回数据源中的所有数据 就我而言 我使用 Spring JdbcTempla
  • 用于缓存的 Servlet 过滤器

    我正在创建一个用于缓存的 servlet 过滤器 这个想法是将响应主体缓存到memcached 响应正文由以下方式生成 结果是一个字符串 response getWriter print result 我的问题是 由于响应正文将不加修改地放
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • 在 Clojure 中解压缩 zlib 流

    我有一个二进制文件 其内容由zlib compress在Python上 有没有一种简单的方法可以在Clojure中打开和解压缩它 import zlib import json with open data json zlib wb as
  • 如何停止执行的 Jar 文件

    这感觉像是一个愚蠢的问题 但我似乎无法弄清楚 当我在 Windows 上运行 jar 文件时 它不会出现在任务管理器进程中 我怎样才能终止它 我已经尝试过 TASKKILL 但它对我也不起作用 On Linux ps ef grep jav
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • 我可以限制分布式应用程序发出的请求吗?

    我的应用程序发出 Web 服务请求 提供商处理的请求有最大速率 因此我需要限制它们 当应用程序在单个服务器上运行时 我曾经在应用程序级别执行此操作 一个对象跟踪到目前为止已发出的请求数量 并在当前请求超出允许的最大负载时等待 现在 我们正在
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • 替换文件中的字符串

    我正在寻找一种方法来替换文件中的字符串而不将整个文件读入内存 通常我会使用 Reader 和 Writer 即如下所示 public static void replace String oldstring String newstring
  • 使用 JFreeChart 为两个系列设置不同的 y 轴

    我正在使用 JFreeChart 使用折线图绘制两个数据系列 XYSeries 复杂的因素是 其中一个数据系列的 y 值通常远高于第二个数据系列的 y 值 假设第一个系列的 y 值约为数百万数量级 而第二个数据系列的 y 值约为数百万数量级
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向
  • try-with-resources 中出现死代码警告,但翻译后的 try-catch-finally 中没有出现死代码警告

    以下代码使用try 有资源 https docs oracle com javase specs jls se7 html jls 14 html jls 14 20 3Java 8 中引入的构造 偶尔抛出 方法被声明为抛出一个偶尔的异常
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要

随机推荐

  • MyISAM和InnoDB区别关联详解

    Mysql架构 什么存储引擎 MySQL和InnoDB对比1 2 总结 Mysql存储架构 从上图可以发现 MySQL由以下几部分组成 连接池组件 管理服务和工具组件 SQL接口组件 查询分析器组件 优化器组件 缓冲 Cache 组件 插件
  • C++引用,四区和函数

    引用变量 四区 函数 没有函数重载 代码区 全局区 堆区和栈区 代码区 全局区 栈区 堆区 new操作符 引用 函数的默认参数 函数的占位参数 代码区 全局区 堆区和栈区 注意 其中代码区和全局区是运行前的 栈区和堆区是运行后的 即如果ex
  • 微信小程序实现举报功能

    一 后台接口 userController java 前端接收一个usersReportd对象 包含数据如下 PostMapping reportUser public IMoocJSONResult reportUser RequestB
  • React Hooks

    Facebook团队对社区上的MVC框架都不太满意的情况下 开发了一套开源的前端框架react 于2013年发布第一个版本 react最开始倡导函数式编程 使用function以及内部方法React creactClass创建组件 之后在E
  • 第二章 系统设置及基本操作

    第二章 系统设置及基本操作 使用GNOME桌面套件中的首选项设置及系统管理工具执行以下任务 一 为第一块网卡设置静态IP地址 并能够与同网段中的其他主机相互通信 步骤 1 点击 系统 管理 网络 打开 网络配置 窗口 如图所示 2 在 配置
  • 华为od机试 C++ 猜字谜

    题目 玩家看到的是个错乱的单词 像 nesw 这样 他们要做的就是从一大堆备选的单词中 猜出这个错乱单词原来的模样 怎么才算猜对了呢 有两种可能 把错乱单词的字母重新排列一下 如果跟备选单词一模一样 那就对了 例如 nwes 重新排列就是
  • CTFshow 命令执行 web34

    源码
  • 小白上路~微信小程序登录授权无法获取用户信息

    1 button 标签和 open type getUserInfo 获取用户信息失败 天哪噜 必须好好记录一番由于没有看官方文档更新 api 而导致的 BUG 一觉醒来 发现准备收尾的小程序无法获取到用户信息了 怎么回事 于是一顿焦虑 骚
  • CodeWhisperer 初体验

    今年算是 AI 正式破圈的一年 无数的工具 产品横空出世 无论在面向企业的大语言模型 还是帮助个人的 AI 工具 数不胜数 其中关于 AI 编程助手领域 近年来也涌现了很多不错的产品 例如 Copilot Cursor 还是我们今天要体验的
  • 【转】在iPad的Safari上查看HTML源代码

    在网上搜索的文章 转来转去 基本上都缺少了关键脚本 所以写在这了 使用方法 1 随便保存一个书签 名称就叫查看源码之类的就好了 2 编辑该书签 删除原网址 将下面的脚本黏贴到网址中 3 在你想要查看源码的页面点击该书签 源码就出现了 jav
  • 【Pytorch】第 1 章 :强化学习和 PyTorch 入门

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • html网页的基本标签

    1 标题标签 h1 一级标签 h1 h2 二级标签 h2 h3 三级标签 h3 h4 四级标签 h4 h5 五级标签 h5 2 段落标签 p 民办清华 建校三十周年 p p okok p 3 换行标签 4 水平线标签 5 字体样式标签 st
  • python写水仙花数

    水仙花数是指一个n位数 n gt 3 他的每个位上 的数字的n次幂之和等于他本身 例1 3 5 3 求1000以内的水仙花数 i 100 while i lt 1000 a i 100 b i 10 10 c i 10 if a 3 b 3
  • FPGA学习日记(五)ZYNQ——在线逻辑分析仪(ILA)硬件调试及simulator仿真软件的创建使用

    一 在线逻辑分析仪 ILA vivado的在线逻辑分析仪 ILA 其借用了传统逻辑分析仪的理念以及大部分的功能 并利用 FPGA 中的逻辑资源 将这些功能植入到 FPGA 的设计当中 如下图所示 ILA占用一部分FPGA内部逻辑资源 可看做
  • 运算放大器的关键指标详解二(噪声)

    1 噪声指标 Noise 一个正常工作的放大电路 当输入端接地时 用示波器观察输出 你看到的可能不是平直的细线 而是在一定幅度之内的杂乱无章的波形 这就是噪声 你在示波器上看到线越粗 就说明噪声幅度越大 放大电路的输出端噪声 小至 V 以下
  • redis客户端Jedis和Lettuce

    Jedis和Lettuce的区别 Jedis是同步的 不支持异步 Jedis客户端实例不是线程安全的 需要每个线程一个Jedis实例 所以一般通过连接池来使用Jedis Lettuce是基于Netty框架的事件驱动的Redis客户端 其方法
  • 12、剪绳子——剑指offer——动态规划

    剪绳子 问题描述 给你一根长度为n的绳子 请把绳子剪成m段 m和n都是整数 n gt 1并且m gt 1 每段绳子的长度记为k 0 k 1 k m 请问k 0 k 1 k m 可能的最大乘积是多少 首先本题可以用贪婪算法和动态规划算法求解
  • VLC在Android中的使用以及vlc中options的参数

    options 中的参数 我在csdn中找过很多篇文章了 有的文章一个参数也没写 有的写的都是关于缓存的 还有的写了几个 也没说明是什么意思 然后只能跑到csdn下载文档查看 为了方便网友们的使用 这里就简单写一下我是怎么使用的 后面会附上
  • Flink-cdc 同步mysql数据

    下载地址 https github com ververica flink cdc connectors releases 这里下载2 2 0版本 https github com ververica flink cdc connector
  • 搭建RocketMq(超详细,图文并茂)

    环境 jdk 1 8 rocketMq 版本 4 5 1 rocketmq all 4 5 1 bin release zip 附上链接 小伙伴自行下载 链接 https pan baidu com s 1zyzF3uZ3YN0YWzcLt