rocketmq(三)简单入门及示例
首先去github下载rocketmq源码(https://github.com/apache/rocketmq)到本地环境(使用jdk8的环境)
打开namesrv模块创建启动类:
public class NamesrvSelfStartup {
public static void main(String[] args) throws Exception {
NettyServerConfig nettyServerConfig = new NettyServerConfig();
NamesrvConfig namesrvConfig = new NamesrvConfig();
nettyServerConfig.setListenPort(9876);
NamesrvController nameSrvController = new
NamesrvController(namesrvConfig, nettyServerConfig);
boolean initResult = nameSrvController.initialize();
nameSrvController.start();
}
}
启动成功后出来如下截图日志:

然后打开broker模块创建启动类如下:
public class BrokerSelfStartup {
public static void main(String[] args) throws Exception {
// 设置版本号
System.setProperty(RemotingCommand.REMOTING_VERSION_KEY, Integer.toString(MQVersion.CURRENT_VERSION));
// NettyServerConfig 配置
final NettyServerConfig nettyServerConfig = new NettyServerConfig();
nettyServerConfig.setListenPort(10911);
// BrokerConfig 配置
final BrokerConfig brokerConfig = new BrokerConfig();
brokerConfig.setNamesrvAddr("127.0.0.1:9876");
// MessageStoreConfig 配置
final MessageStoreConfig messageStoreConfig = new MessageStoreConfig();
// 创建 BrokerController 对象,并启动
BrokerController brokerController = new BrokerController(//
brokerConfig, //
nettyServerConfig, //
new NettyClientConfig(), //
messageStoreConfig);
brokerController.initialize();
brokerController.start();
}
}
Broker 配置
| 参数名 | 默认值 | 说明 |
|---|---|---|
| listenPort | 10911 | 接受客户端连接的监听端口 |
| namesrvAddr | null | nameServer 地址 |
| brokerIP1 | 网卡的 InetAddress | 当前 broker 监听的 IP |
| brokerIP2 | 跟 brokerIP1 一样 | 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步 |
| brokerName | null | broker 的名称 |
| brokerClusterName | DefaultCluster | 本 broker 所属的 Cluser 名称 |
| brokerId | 0 | broker id, 0 表示 master, 其他的正整数表示 slave |
| storePathCommitLog | $HOME/store/commitlog/ | 存储 commit log 的路径 |
| storePathConsumerQueue | $HOME/store/consumequeue/ | 存储 consume queue 的路径 |
| mappedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | commit log 的映射文件大小 |
| deleteWhen | 04 | 在每天的什么时间删除已经超过文件保留时间的 commit log |
| fileReservedTime | 72 | 以小时计算的文件保留时间 |
| brokerRole | ASYNC_MASTER | SYNC_MASTER/ASYNC_MASTER/SLAVE |
| flushDiskType | ASYNC_FLUSH | SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。 |
启动成功后namesrv端出来日志:
RocketmqNamesrv - receive request, 103 127.0.0.1:54088 RemotingCommand [code=103, language=JAVA, version=317, opaque=0, flag(B)=0, remark=null, extFields={brokerId=0, bodyCrc32=567189377, clusterName=DefaultCluster,
brokerAddr=192.168.1.107:10911, haServerAddr=192.168.1.107:10912, compressed=false, brokerName=DESKTOP-36B2OOS}, serializeTypeCurrentRPC=JSON]
表示broker端连接namesrv成功了。接下来开始使用example模块下的quickstart开始进行简单的消息发送与接受:
在producer端指定namesrv的地址: producer.setNamesrvAddr("localhost:9876");
然后在consumer端指定namesrv的地址: consumer.setNamesrvAddr("localhost:9876");
然后先启动producer再启动consumer,控制台就是打印发送成功与接受消息成功的日志:
SendResult [sendStatus=SEND_OK, msgId=C0A8016B147018B4AAC26B8372B40371, offsetMsgId=C0A8016B00002A9F0000000000026B06, messageQueue=MessageQueue
[topic=TopicTest, brokerName=DESKTOP-36B2OOS, queueId=3], queueOffset=220] ConsumeMessageThread_15 Receive New Messages: [MessageExt [queueId=3, storeSize=180, queueOffset=249, sysFlag=0, bornTimestamp=1566392576764,
bornHost=/192.168.1.107:54471, storeTimestamp=1566392576764, storeHost=/192.168.1.107:10911, msgId=C0A8016B00002A9F000000000002BC96, commitLogOffset=179350,
bodyCRC=1102156316, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=250, CONSUME_START_TIME=1566392599687,
UNIQ_KEY=C0A8016B147018B4AAC26B8372FC03E5, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 57, 57, 55], transactionId='null'}]]

浙公网安备 33010602011771号