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 控制台出现如下内容即为当前消息发送成功

相关推荐
Sailing5 小时前
🚀🚀 从前端到AI Agent开发者,只差这一篇入门指南
前端·后端·ai编程
JimmtButler5 小时前
Namesrv解析
后端·rocketmq
调试人生的显微镜5 小时前
iOS 26 性能监控工具有哪些?多工具协同打造全方位性能分析体系
后端
苏三说技术5 小时前
千万级大表如何删除数据?
后端
John_ToDebug5 小时前
架构的尺度:从单机到分布式,服务端技术的深度演进
后端·程序人生
调试人生的显微镜5 小时前
Fastlane 结合 开心上架 命令行版本实现跨平台上传发布 iOS App
后端
weixin_545019325 小时前
Spring Boot 项目开启 HTTPS 完整指南:从原理到实践
spring boot·后端·https
掘金一周6 小时前
第一台 Andriod XR 设备发布,Jetpack Compose XR 有什么不同?对原生开发有何影响? | 掘金一周 10.30
前端·人工智能·后端
张乔246 小时前
spring boot项目快速整合xxl-job实现定时任务
spring boot·后端·xxl-job