Rocket 双主双从实战 超级详细

1、环境准备

4台机器,2台部署NameServer,4台部署Broker,双主双从 同步复制,异步刷盘。

192.168.1.38  nameServer   Broker-a
192.168.1.39  nameServer   Broker-a-s
192.168.1.40               Broker-b
192.168.1.41               Broker-b-s 

在这里插入图片描述

2、修改内存


#进入该目录
cd /usr/local/rocketmq/distribution/target/apache-rocketmq/bin
#如果NameServer Broker报内存错误 那么修改NameServer Broker的内存
vim runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
vim runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms528m -Xmx528m -Xmn256m"

3、修改配置文件

3.1、192.168.1.38 修改broker-a配置文件

cd   /usr/local/rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync
vim broker-a.properties

#寻找NameServer
namesrvAddr=192.168.1.38:9876;192.168.1.39:9876
#集群名称
brokerClusterName=DefaultCluster
#brokername,从节点根据brokerName找主节点
brokerName=broker-a
#brokerID,0是主节点
brokerId=0
#删除时间为每天凌晨4点
deleteWhen=04
#保存时间48小时
fileReservedTime=48

#broker关系
#ASYNC_MASTER:异步复制
#SYNC_MASTER:同步双写
brokerRole=SYNC_MASTER

#刷盘方式
#- ASYNC_FLUSH  异步刷盘
#- SYNC_FLUSH  同步刷盘
flushDiskType=ASYNC_FLUSH

#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort

3.2、192.168.1.39修改broker-a-s配置文件

cd   /usr/local/rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync
vim broker-a-s.properties

namesrvAddr=192.168.1.38:9876;192.168.1.39:9876
brokerClusterName=DefaultCluster
#找brokerName
brokerName=broker-a
#brokerID 为1是从节点
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort

3.3、192.168.1.40 修改broker-b主节点


cd   /usr/local/rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync
vim broker-b.properties

namesrvAddr=192.168.1.38:9876;192.168.1.39:9876
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH

#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort

3.4、192.168.1.41 修改broker-b-s 从节点


cd   /usr/local/rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync
vim broker-b-s.properties

namesrvAddr=192.168.1.38:9876;192.168.1.39:9876
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort

4、启动NameServer


#38,39两台机器:
cd /usr/local/rocketmq/distribution/target/apache-rocketmq/bin
nohup sh ./mqnamesrv  >/dev/null 2>&1 &

5、启动broker


#38 39 40 41
cd /usr/local/rocketmq/distribution/target/apache-rocketmq/bin
nohup sh  ./mqbroker  -c  ../conf/2m-2s-sync/broker-a.properties  >/dev/null  2>&1  &
nohup sh  ./mqbroker  -c  ../conf/2m-2s-sync/broker-a-s.properties  >/dev/null  2>&1  &
nohup sh  ./mqbroker  -c  ../conf/2m-2s-sync/broker-b.properties  >/dev/null  2>&1  &
nohup sh  ./mqbroker  -c  ../conf/2m-2s-sync/broker-b-s.properties  >/dev/null  2>&1  &

6、控制台


cd /usr/local/rocketmq-console/src/main/resources
vim application.properties

rocketmq.config.namesrvAddr=192.168.1.38:9876;192.168.1.39:9876

在这里插入图片描述

7、启动


nohup java -jar  rocketmq-console-ng-1.0.1.jar    1>/dev/null    2>&1    &

在这里插入图片描述

8、测试程序

8.1、pom


<dependencies>
    <dependency>
        <groupId>org.apache.rocketmq</groupId>
        <artifactId>rocketmq-client</artifactId>
        <version>4.4.0</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.6</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.8.1</version>
    </dependency>
</dependencies>

8.2、Consts


public class RocketMQConsts {
    //=========================Hello RocketMQ==========================
    public static final String HELLO_TOPIC = "helloTopic";
    public static final String HELLO_GROUP_PROVIDER = "helloGroupProvider";
    public static final String HELLO_TAG = "helloTag";
    public static final String HELLO_KEY = "helloKey";
    public static final String HELLO_NAMESERVER = "192.168.1.38:9876;192.168.1.39:9876";
    public static final String HELLO_GROUP_CUSTOMER = "helloGroupCustomer";
}

8.3、Producer


public class RocketMQProducer {

    public static void main(String[] args) throws Exception {
        //创建producer,设置NameServer地址, 关闭rocketmq 虚拟IP
        DefaultMQProducer producer = new DefaultMQProducer(RocketMQConsts.HELLO_GROUP_PROVIDER);
        producer.setNamesrvAddr(RocketMQConsts.HELLO_NAMESERVER);
        producer.start();
        for (int i = 1; i <= 10; i++) {
            Message msg = new Message(RocketMQConsts.HELLO_TOPIC, RocketMQConsts.HELLO_TAG, RocketMQConsts.HELLO_KEY, "HELLO MSG".getBytes());
            SendResult send = producer.send(msg);
            System.out.println(send);
        }
        producer.shutdown();
    }

}

8.4、Custsomer


public class RocketMQCustomer {
    public static void main(String[] args) {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer();
        //配置组名 IP
        consumer.setNamesrvAddr(RocketMQConsts.HELLO_NAMESERVER);
        consumer.setConsumerGroup(RocketMQConsts.HELLO_GROUP_CUSTOMER);
        //最后偏移量读取消息
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
        try {
            //订阅主题,监听主题下哪些标签
            consumer.subscribe(RocketMQConsts.HELLO_TOPIC, "*");
            consumer.registerMessageListener(new MessageListenerOrderly() {
                @Override
                public ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs, ConsumeOrderlyContext context) {
                    Message msg = msgs.get(0);
                    try {
                        System.out.println(Thread.currentThread().getName() + "receive msg: " + new String(msg.getBody(), "utf-8"));
                        return ConsumeOrderlyStatus.SUCCESS;
                    } catch (Exception e) {
                        e.printStackTrace();
                        //等会在消费
                        return ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT;
                    }
                }
            });
            //开始
            consumer.start();
        } catch (MQClientException e) {
            e.printStackTrace();
        }
    }
}

8.5、运行消费者 运行生产者
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

响彻天堂丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值