一、源码下载
可通过github将源码下载到本地,将源码导入到idea中。
二、环境配置
1.配置文件处理
在项目根目录下新建conf目录,将distribution模块中conf目录下的broker.conf、logback_broker.xml及logback_namesrv.xml文件拷贝到新建的conf目录下。
2.新建存储及日志文件
在项目跟目录下新建/ws/store及/ws/logs目录,用与日志存放及消息存储。
3.消息配置修改
3.1 修改broker.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
#namesrv地址
namesrvAddr = 127.0.0.1:9876
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
#消息存储路径
storePathRootDir = D:\\coderepo\\sourceCodeReading\\rocketmq\\ws\\store
#CommitLog存储路径
storePathCommitLog = D:\\coderepo\\sourceCodeReading\\rocketmq\\ws\\store\\commitLog
#消息队列存储路径
storePathConsumerQueue = D:\\coderepo\\sourceCodeReading\\rocketmq\\ws\\store\\consumerQueue
#消息索引存储路径
storePathIndex = D:\\coderepo\\sourceCodeReading\\rocketmq\\ws\\store\\index
#Checkpoint 文件存储路径
storeCheckpoint = D:\\coderepo\\sourceCodeReading\\rocketmq\\ws\\store\\checkpoint
#abort文件存储路径
abortFile = D:\\coderepo\\sourceCodeReading\\rocketmq\\ws\\store\\abort
3.2 修改logback_broker.xml
将配置文件中所有的${user.home}替换为新建的日志文件夹。
三、组件启动
1.nameServer启动
1.1配置ROCKETMQ_HOME
配置ROCKETMQ_HOME为项目根目录,例如:
ROCKETMQ_HOME=D:\coderepo\sourceCodeReading\rocketmq
1.2启动nameSrv
右键运行,控制台打印The Name Server boot success. serializeType=JSON代表nameServer启动成功
2.broker启动
2.1 配置ROCKETMQ_HOME
同nameServer启动配置
2.2 配置启动参数
启动参数增加-c,指定broker配置文件
-c D:\coderepo\sourceCodeReading\rocketmq\conf\broker.conf
2.3启动broker
右键运行,控制台打印The broker[broker-a, 10.1.112.132:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876代表broker启动成功。
3.生产者启动
在example模块下,找到Producer类,增加nameSvrAddr配置
public class Producer {
public static void main(String[] args) throws MQClientException, InterruptedException {
/*
* Instantiate with a producer group name.
*/
DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
/*
* Specify name server addresses.
* <p/>
*
* Alternatively, you may specify name server addresses via exporting environmental variable: NAMESRV_ADDR
* <pre>
* {@code
* producer.setNamesrvAddr("name-server1-ip:9876;name-server2-ip:9876");
* }
* </pre>
*/
producer.setNamesrvAddr("127.0.0.1:9876");
/*
* Launch the instance.
*/
producer.start();
for (int i = 0; i < 1000; i++) {
try {
/*
* Create a message instance, specifying topic, tag and message body.
*/
Message msg = new Message("TopicTest" /* Topic */,
"TagA" /* Tag */,
("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
);
/*
* Call send message to deliver message to one of brokers.
*/
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
} catch (Exception e) {
e.printStackTrace();
Thread.sleep(1000);
}
}
/*
* Shut down once the producer instance is not longer in use.
*/
producer.shutdown();
}
}
右键启动,进行消息发送。
4.消费者启动
在example模块下,找到Consumer类,增加nameSvrAddr配置
public class Consumer {
public static void main(String[] args) throws InterruptedException, MQClientException {
/*
* Instantiate with specified consumer group name.
*/
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name_4");
/*
* Specify name server addresses.
* <p/>
*
* Alternatively, you may specify name server addresses via exporting environmental variable: NAMESRV_ADDR
* <pre>
* {@code
* consumer.setNamesrvAddr("name-server1-ip:9876;name-server2-ip:9876");
* }
* </pre>
*/
consumer.setNamesrvAddr("127.0.0.1:9876");
/*
* Specify where to start in case the specified consumer group is a brand new one.
*/
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
/*
* Subscribe one more more topics to consume.
*/
consumer.subscribe("TopicTest", "*");
/*
* Register callback to execute on arrival of messages fetched from brokers.
*/
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext context) {
System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs);
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
/*
* Launch the consumer instance.
*/
consumer.start();
System.out.printf("Consumer Started.%n");
}
}
右键完成消费者启动。
至此,源码搭建的工作就已经完成。