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'}]]

  

 

posted @ 2019-08-21 21:04  fantastiLi  阅读(305)  评论(0)    收藏  举报