RocketMQ-源码解读与调试

2023-11-18

源码环境搭建

源码拉取:

RocketMQ的官方Git仓库地址:GitHub - apache/rocketmq: Mirror of Apache RocketMQ 可以用git把项目clone下来或者直接下载代码包。也可以到RocketMQ的官方网站上下载指定版本的码: Downloading the Apache RocketMQ Releases - Apache RocketMQ

RocketMQ源码下载

下载后就可以解压导入到IDEA中进行解读了。我们只要注意下是下载的4.7.1版本就行了。

源码下很多的功能模块,很容易让人迷失方向,我们只关注下几个最为重要的模块:

broker: broker 模块(broke 启动进程)

client :消息客户端,包含消息生产者、消息消费者相关类

example: RocketMQ 例代码

namesrv:NameServer实现相关类(NameServer启动进程)

store:消息存储实现相关类

各个模块的功能大都从名字上就能看懂。我们可以在有需要的时候再进去看源码。但是这些模块有些东西还是要关注的。例如docs文件夹下的文档,以及各个模块下都有非常丰富的junit测试代码,这些都是非常有用的。

源码调试

将源码导入IDEA后,需要先对源码进行编译。编译指令 clean install -Dmaven.test.skip=true

RocketMQ源码编译

编译完成后就可以开始调试代码了。调试时需要按照以下步骤:

调试时,先在项目目录下创建一个conf目录,并从distribution拷贝broker.conf和logback_broker.xml和logback_namesrv.xml

源码6

注解版源码中已经复制好了。

启动nameServer

展开namesrv模块,运行NamesrvStartup类即可启动NameServer,启动配置启动参数 或者代码设置

Nameserver启动

配置完成后,再次执行,看到以下日志内容,表示NameServer启动成功

The Name Server boot success. serializeType=JSON

启动Broker

启动Broker之前,我们需要先修改之前复制的broker.conf文件

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH

# 自动创建Topic
autoCreateTopicEnable=true
# nameServ地址
namesrvAddr=localhost:9876
# 存储路径
storePathRootDir= storerocketmq
# commitLog路径
storePathCommitLog=storerocketmq\commitlog
# 消息队列存储路径
storePathConsumeQueue=storerocketmq\consumequeue
# 消息索引存储路径
storePathIndex=storerocketmq\index
# checkpoint文件路径
storeCheckpoint=storerocketmq\checkpoint
# abort文件存储路径
abortFile=storerocketmq\abort

然后Broker的启动类是broker模块下的BrokerStartup。

启动Broker时,同样需要ROCETMQ_HOME环境变量,并且还需要配置一个-c 参数,指向broker.conf配置文件。

The broker[LAPTOP-M42V5TBM, 192.168.3.12:10911] boot success. serializeType=JSON

发送消息

在源码的example模块下,提供了非常详细的测试代码。例如我们启动example模块下的org.apache.rocketmq.example.quickstart.Producer类即可发送消息。

但是在测试源码中,需要指定NameServer地址。这个NameServer地址有两种指定方式,一种是配置一个NAMESRV_ADDR的环境变量。另一种是在源码中指定。我们可以在源码中加一行代码指定NameServer

producer.setNamesrvAddr("127.0.0.1:9876");

然后就可以发送消息了。

消费消息

我们可以使用同一模块下的org.apache.rocketmq.example.quickstart.Consumer类来消费消息。运行时同样需要指定NameServer地址

consumer.setNamesrvAddr("127.0.0.1:9876");

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

RocketMQ-源码解读与调试 的相关文章

  • 方法返回类型前的 是什么意思?

    下面的方法返回一个List组成T类型元素 public
  • 在Maven中生成Version.java文件

    我有一个使用 Ant 脚本构建的 Java 项目 我正在尝试将项目转换为 Maven 其中一项任务生成一个名为 Version java 的 Java 源文件 其中包含编译时间戳的静态字符串表示形式 如下所示 package com foo
  • 连接外部 Accumulo 实例和 java

    我正在尝试使用 Accumulo 连接到虚拟机 问题是 我无法将其连接到 Java 中 我可以看到 Apache 抛出的网页 但我无法让它与代码一起工作 我认为这是缺乏知识的问题而不是真正的问题 但我找不到这方面的文档 所有示例都使用 lo
  • Java LostFocus 和 InputVerifier,按反向制表符顺序移动

    我有一个 GUI 应用程序 它使用 InputVerifier 在产生焦点之前检查文本字段的内容 这都是很正常的 然而 昨天发现了一个问题 这似乎是一个错误 但我在任何地方都找不到任何提及它的地方 在我将其报告为错误之前 我想我应该问 我在
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • JOOQ 忽略具有默认值的数据库列

    看来JOOQ完全忽略了数据库列的默认值 既不会更新 ActiveRecord 对象 也不会在 INSERT 时跳过此列 相反 它尝试将其设置为 NULL 这在 NOT NULL 列上失败 Example CREATE TABLE bug f
  • 如何使用 Java Apache POI 隐藏 Excel 工作表中以下未使用的行?

    我正在使用数据库中的数据填充模板 Excel 工作表 for Map
  • 将类转换为 JSONObject

    我有好几堂这样的课 我想将类转换为 JSONObject 格式 import java io Serializable import com google gson annotations SerializedName public cla
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • 使用 JDBC 连接到 PostgreSql 的本地实例

    我在 Linux 机器上有一个正在运行的 PostgreSql 本地实例 当我使用psql来自 shell 的命令我成功登录 没有任何问题 我需要通过 JDBC 连接到 PostgreSql 但我不知道我到底应该传递什么url参数为Driv
  • IntelliJ Idea:将简单的 Java servlet(无 JSP)部署到 Tomcat 7

    我尝试按照教程进行操作here http wiki jetbrains net intellij Creating a simple Web application and deploying it to Tomcat部署 servlet
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • 如何使用 Jersey 将嵌套列表封送为 JSON?我得到一个空数组或一个包含数组的单元素字典数组

    我正在开发一个使用 Jersey 将对象转换为 JSON 的项目 我希望能够写出嵌套列表 如下所示 data one two three a b c 我想要转换的对象首先将数据表示为 gt gt 我认为 Jersey 会做正确的事情 以上输
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • java实现excel价格、收益率函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 什么是 Java2D 处理程序线程?

    我创建了一个使用 Hibernate 的示例 java 应用程序 当我进行线程转储时 我观察到一个名为 Java2D Disposer 的奇怪线程 有人能告诉我该线程的功能吗 AWT 系统中的某些实体需要最终确定以释放资源 最突出的例子是j
  • Java 的“&&”与“&”运算符

    我使用的示例来自 Java Herbert Schildt 的完整参考文献 第 12 版 Java 是 14 他给出了以下 2 个示例 如果阻止 第一个是好的 第二个是错误的 因此发表评论 public class PatternMatch
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve
  • GAE 无法部署到 App Engine

    我正在尝试从 Eclipse 发布 Web 应用程序 我在 GAE 上创建了四个项目 可以通过登录我的帐户并查看控制台来查看它们 我已经改变了appengine web xml到项目的应用程序 ID 如果我将其更改为 GAE 上第一个创建的

随机推荐

  • 一文学会使用GCeasy——一款超好用的在线分析GC日志的网站

    https blog csdn net CoderBruis article details 101234738
  • #145 - Table 'xxxxx' is marked as crashed and should

    数据表损坏了 只需要修复一下就可以了 进入数据库 执行以下SQL REPAIR TABLE lt datastore
  • box-shadow 设置后看不到的问题

    引子 在修复问题的时候 发现一个元素设置了 box shadow 属性 其它的元素也有公用 但这个元素的阴影看不见 试着把颜色值变的更明显 但还是看不到 问题示例 示例二维码 Origin My GitHub 问题原因 首先想到是不是属性写
  • 12月份GitHub上最热门的Web开源项目

    在过去的一个月里 mybridge对将近200个Web开发开源项目排名 mybridge根据各种因素 对项目进行比较 并从中精选出前10位 上榜开源项目所获得Star数平均为 5550 1Quicklink https github com
  • Day.1 LeetCode刷题练习(最长公共前缀 C/C++两种解法)

    题目 例子 分析题目 主要目的 求出各个字符串的公共前缀 思路 本人解法 用所给实例来看 不难看出我们可以直接以竖着对应来查看是否是公共前缀 这样就有了一定的思路 然后接着想如何让他找到最长的公共前缀后就 停止下来呢 这样就能想到 从最短的
  • Win11共享打印机指定的网络名不可用?

    不知道大家在使用共享打印机的时候是否有遇到错误 共享打印机指定的网络名不可用 的情况 如果有的话 可以试试下面的解决办法 原因很明确 网络名称无法使用 有冲突 删除网络连接 重新建立即可 方法一 1 按键盘上的 Win X 组合键 或右键点
  • 审批流设计

    审批流系统 在日常企业中 经常涉及员工提交申请单 需要上级领导和多个节点审批通过 驳回 已完成申请单 实现目标 工单自定义模版 需支持用户自定义表单 拖拽式动态生成流转表单 打造低代码平台 降低了研发投入成本 提高整体人效 工单流程需支持用
  • element-ui el-upload 上传文件类型限制

    1
  • 双系统之删除Linux

    本文环境 win10 Ubuntu 先删除引导再操作卷 因为之前想学习Linux 所以就在win10上又安装了Ubuntu 现在不想搞了 再加上win10空间不太够用了 就想删除linux系统 话不多说 直接开始 删除Linux主要分为两部
  • 期望, 方差, 协方差,标准差

    期望 方差 协方差 标准差 期望 概率论中描述一个随机事件中的随机变量的平均值的大小可以用数学期望这个概念 数学期望的定义是实验中可能的结果的概率乘以其结果的总和 定义 设P x 是一个离散概率分布 自变量的取值范围为 x 1 x 2 x
  • 互联网+洗鞋店预约小程序新模式;

    互联网 洗鞋店预约小程序 1 线上线下业务的结合 传统的线下业务消费者到店可以向其推介线上的预约到家服务 让线下的消费者成为小程序内的会员 留存客户之后线上可直接触达 减少与消费者的距离 从等待客户到可以主动出击 有什么活动能第一时间推送到
  • WCF 自托管、无配置文件实现jsonp(跨域)的访问

    以下内容基于WCF4 0 本文将对比讨论配置文件方案和无配置文件方案的实现方式 WCF4 0加入了对RESTFU和标准终结点的支持 这为实现跨域提供了简单的方式 一 有配置文件的情况 首先我们先定义一个服务 ServiceContract
  • React styled-components (一) —— 基本使用

    https github com styled components styled components styled components 基本使用 介绍 优点 缺点 安装 引入 使用 基本用法 样式嵌套 介绍 styled compon
  • 三十六.用牛顿迭代法求输入的数的平方根

    欲求a的平方根 首先猜测一个值x1 a 2 也可以是随便其他什么值 作为其平方根 然后根据下面的迭代公式算出x2 再将x2代入公式右边算出x3 直到连续两次算出的xn和xn 1的差的绝对值小于某个值符号网名大全花样符号 即认为找到了足够精确
  • jQuery实现父窗口的问题

    因为先前遇到的问题 所以我考虑采用 IFRAME 来隔离不同的脚本 从而实现我需要的效果 在框架中 我用 JavaScript 获取 JSON 数据 组织成 HTML 代码 最后将其填充至上层文档的一个元素中 按照一般的写法 我们需要用到类
  • 微信接口开发报错invalid credential, access_token is invalid or not latest hint

    微信接口凭证access token一定要全局管理 我们的查酒后台集成了微信公众平台的客服API接口 不用登录微信公众号的后台就可以直接给用户发送消息 最近 运营的同事反馈 通过微信查酒 后台无法直接给用户推送微信消息了 起初 我也没在意
  • 揭秘:WhatsApp的注册策略

    WhatsApp账号的注册方式可以分为两种 实体卡注册和虚拟卡注册 实体卡注册是指使用个人手机卡完成注册 而虚拟卡注册则通过前面提到的对接平台来完成的 账号注册问题一直是导致WhatsApp账号永久封禁的主要原因 由于WhatsApp广泛为
  • HTML5口红西瓜见缝插针小游戏代码

    下载地址 口红西瓜HTML5见缝插针手机游戏代码 口红西瓜见缝插针手机游戏源代码 dd
  • Windows11如何正确修改电脑用户名——解决修改用户名之后无法找到文件路径,路径不存在问题——用Registry Workshop批量操作注册表

    c users 后面是中文会有什么影响 很多人在刚拿到电脑的时候 注册用户名的时候直接填的中文 对一名程序员来说 用户名是中文 有时候在程序运行的过程中会产生非常多的麻烦 解决办法 想要了解第三点的命令的可以看这里http t csdn c
  • RocketMQ-源码解读与调试

    源码环境搭建 源码拉取 RocketMQ的官方Git仓库地址 GitHub apache rocketmq Mirror of Apache RocketMQ 可以用git把项目clone下来或者直接下载代码包 也可以到RocketMQ的官