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