RocketMQ本地编译

源码下载

去RcoketMQ官网下载执行版本的源码包,通过idea打开,打开之后设置JDK版本为JDK8

关闭代码风格检查插件

com.github.spotbugs是一个代码风格检查插件,没啥用,注解注释

编译

进入主目录 执行 mvn -Prelease-all -DskipTests clean install -U。

如果编译过程中报错,可能是网络问题导致依赖包下载失败,记得开梯子

指定配置文件

编译完成之后会在distribution中创建一个target目录,如图所示有一个conf文件夹

在当前目录创建一个conf文件,将截图所示下的conf文件里面的内容全部拷贝到我们创建的conf文件夹中。

  • 这里面的broker.conf就是broker启动的配置文件
  • dleger文件夹下面是当broker以Raft协议启动一个集群,可以实现master节点不可用之后自动选主,保障业务可用性。

NameSrv启动

这里选择namesrv所在moudle 点击这里,idea会自动搜索当前moudle可以运行的类

选择NamesrvStartup这个类

点击OK保存之后,启动Namesrv

控制出现如下内容表示Namesrv启动成功

Broker启动

broker.conf文件修改

broker.conf中指定了commitLog,consumequeue等文件地址。可以在当前目录创建对应文件出方地址。然后更新broker.conf中的文件存放地址为我们创建的地址 namesrvAddr = 172.20.16.59:9876 这个一定要改成本地ip

plain 复制代码
brokerClusterName = DefaultCluster
brokerName = broker-a
# brokerId
brokerId = 0
#删除文件的时间点,一天的固定时间执行一次删除过期文件操作,默认为凌晨4点。
deleteWhen = 04
#文件保留时间,也就是从最后一次更新时间到现在,如果超过了该时间,则认为是过期文件,可以被删除,单位小时
fileReservedTime = 48
#broker的角色,默认是异步master,即生产者发送的每一条消息只要写入master就返回告诉生产者成功。然后再"异步复制"到slave。
brokerRole = ASYNC_MASTER
#消息刷盘策略,默认是异步刷盘。
#异步刷盘ASYNC_FLUSH:生产者发送的每一条消息并不是立即保存到磁盘,而是暂时缓存起来,然后就返回生产者成功。随后再异步的将缓存数据保存到磁盘,有两种情况:
#1是定期将缓存中更新的数据进行刷盘,2是当缓存中更新的数据条数达到某一设定值后进行自动刷盘。异步刷盘有较低概率导致消息丢失,比如在还未来得及同步到磁盘的时候宕机,但是性能更好。
#同步刷盘SYNC_FLUSH:生产者发送的每一条消息都在保存到磁盘成功后才返回告诉生产者成功。这种方式不会存在消息丢失的问题,但是有很大的磁盘IO开销,性能有一定影响。
flushDiskType = ASYNC_FLUSH
# namesrv服务地址  这里要变成本地IP
namesrvAddr = 172.20.16.59:9876
# 运行自动创建topic,避免调试的时候麻烦
autoCreateTopicEnable = true
# 数据存储路径
storePathRootDir = D:\\study\\rocketmq-rocketmq-all-5.3.3\\datastore\\datastore
# commitlog存储文件
storePathCommitLog = D:\\study\\rocketmq-rocketmq-all-5.3.3\\datastore\\datastore\\commitlog
# 消费队列存储文件
storePathConsumeQueue = D:\\study\\rocketmq-rocketmq-all-5.3.3\\datastore\\datastore\\consumequeue
# 索引存储文件
storePathIndex = D:\\study\\rocketmq-rocketmq-all-5.3.3\\datastore\\datastore\\index
# checkpoint存储文件
storeCheckpoint = D:\\study\\rocketmq-rocketmq-all-5.3.3\\datastore\\datastore\\checkpoint
# abort文件
abortFile = D:\\study\\rocketmq-rocketmq-all-5.3.3\\datastore\\datastore\\abort

在broker中指定了commitlog,consumequeue等文件存放地址

启动参数设置

点击这个按钮

会自动跳出当前moudle可以使用的主启动类

设置以下启动参数

perl 复制代码
社会项目工作空间  D:\study\RocketMQ-master
指定ROKCETMQ_HOME  ROCKETMQ_HOME=D:\\study\\RocketMQ-master
指定broker启动配置文件 -c D:\\study\\RocketMQ-master\\conf\\broker.conf

启动broker 控制台出现如下内容表示broker启动成功

发送消息验证

全局搜索当前项目下SimpleBatchProducer这个类

java 复制代码
public class SimpleBatchProducer {

    public static final String PRODUCER_GROUP = "BatchProducerGroupName";
    public static final String DEFAULT_NAMESRVADDR = "127.0.0.1:9876";
    public static final String TOPIC = "BatchTest";
    public static final String TAG = "TagA";

    public static void main(String[] args) throws Exception {
        DefaultMQProducer producer = new DefaultMQProducer(PRODUCER_GROUP);
        // Uncomment the following line while debugging, namesrvAddr should be set to your local address
        //指定Namesrv地址,因为这里我们本地启动了Namesrv,所以地址可以是127.0.0.1:9876
        producer.setNamesrvAddr(DEFAULT_NAMESRVADDR);
        producer.start();

        //If you just send messages of no more than 1MiB at a time, it is easy to use batch
        //Messages of the same batch should have: same topic, same waitStoreMsgOK and no schedule support
        List<Message> messages = new ArrayList<>();
        messages.add(new Message(TOPIC, TAG, "OrderID001", "Hello world 0".getBytes()));
        messages.add(new Message(TOPIC, TAG, "OrderID002", "Hello world 1".getBytes()));
        messages.add(new Message(TOPIC, TAG, "OrderID003", "Hello world 2".getBytes()));

        SendResult sendResult = producer.send(messages);
        System.out.printf("%s", sendResult);
    }
}

运行当前SimpleBatchProducer 控制台出现如下内容即为当前消息发送成功

相关推荐
pride.li4 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
upala5 小时前
【仓颉语言入门 · 第二篇 第 6 课】
后端
罗丹丹Luna5 小时前
移动端显示“已提交”以后:SAP 与低代码集成该怎样暴露真实状态
后端·架构
码事漫谈5 小时前
因为太想讨好你,所以AI会骗你
后端
吴凡wudianmei5 小时前
每调一次模型都花钱?如何用工程手段把调用压到最少?
前端·后端·架构
花间相见5 小时前
【计算基础|MySQL01】【上手】安装连接、数据类型与建库建表
数据库·后端
花间相见5 小时前
【计算基础|MySQL02】【上手】SQL 增删改查
数据库·后端
姜鱼问生5 小时前
密码明明一样,为什么 GPG 说“错的“?
后端·算法·架构
.Bryce.5 小时前
在智能体中使用A2A工具:让大模型自己决定“该找谁帮忙“
android·java·服务器·redis·后端·agent·a2a
xiaoqiMikko5 小时前
fastjson 1.2.84 的补丁关掉了一个缓存:addAccept 包前缀白名单下,反序列化慢了 13~28 倍
java·后端·性能优化