rocketMq 单机及集群搭建,附java连接示例

本篇文章搭建环境

centos7、jdk1.8、rocketmq 4.8.0

rocketmq官网地址:http://rocketmq.apache.org/

一、单机搭建

 

1.配置host

输入命令查看hostname:hostnamectl

 

2.vim /etc/hosts 添加配置:192.168.202.221 localhost.localdomain

 

3.解压rocketMQ包放到指定目录下

例如我的存放目录:/opt/rocketMQ/rocketmq-all-4.8.0-bin-release

 

4.创建日志存储目录例如:/opt/rocketMQ/store

 

5.修改启动参数,避免虚拟机中内存不够导致启动失败

/opt/rocketMQ/rocketmq-all-4.8.0-bin-release/bin 目录下的:runbroker.shrunserver.sh

runserver.sh:

runbroker.sh:

 

6.启动nameserver,命令如下:

nohup sh rocketmq-all-4.8.0-bin-release/bin/mqnamesrv &

nohup sh rocketmq-all-4.8.0-bin-release/bin/mqnamesrv > /dev/null 2>&1 &

 

7.启动broker

 

nohup sh mqbroker -c rocketmq-all-4.8.0-bin-release/conf/2m-2s-async/broker-a.properties &

或者

nohup sh rocketmq-all-4.8.0-bin-release/bin/mqbroker -n localhost:9876 &

可以看下:/rocketmq-all-4.8.0-bin-release/logs/rocketmqlogs 目录下的namesrv.logbroker.log 日志文件

 

8.使用命令模拟消息消费,可以看出是否可以正常消费

export NAMESRV_ADDR=localhost:9876

sh tools.sh org.apache.rocketmq.example.quickstart.Producer  

sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

 

二、集群搭建

集群搭建采用两主两从:

准备了两个虚拟机每个分别放一主一从

192.168.202.221   a-master、b-slave

192.168.202.222   b-master、a-slave

 

1.先准备好节点目录,示例:

192.168.202.221:

/opt/rocketmq-cluster/node1/rocketmq-all-4.8.0-bin-release(a-master)

/opt/rocketmq-cluster/node1/logs

/opt/rocketmq-cluster/node1/store

/opt/rocketmq-cluster/node1s/rocketmq-all-4.8.0-bin-release(b-slave)

/opt/rocketmq-cluster/node1s/logs

/opt/rocketmq-cluster/node1s/store

192.168.202.222:

/opt/rocketmq-cluster/node1/rocketmq-all-4.8.0-bin-release(b-master)

/opt/rocketmq-cluster/node1/logs

/opt/rocketmq-cluster/node1/store

/opt/rocketmq-cluster/node1s/rocketmq-all-4.8.0-bin-release(a-slave)

/opt/rocketmq-cluster/node1s/logs

/opt/rocketmq-cluster/node1s/store

 

2.同样和单机搭建一样修改各个节点runbroker.shrunserver.sh的启动参数,避免因为内存不足而启动失败

修改主从配置文件:

cd /opt/rocketmq-cluster/node1/rocketmq-all-4.8.0-bin-release/conf && sed -i 's#${user.home}#/opt/rocketmq-cluster/node1#g' *.xml

cd /opt/rocketmq-cluster/node1s/rocketmq-all-4.8.0-bin-release/conf && sed -i 's#${user.home}#/opt/rocketmq-cluster/node1s#g' *.xml

3.修改各个节点的配置文件,示例:

/opt/rocketmq-cluster/node1/rocketmq-all-4.8.0-bin-release/conf/2m-2s-async/broker-a.properties(a-master)

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.202.221:9876;192.168.202.222:9876
brokerIP1=192.168.202.221
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/opt/rocketmq-cluster/node1/store/broker-a
#commitLog 存储路径
storePathCommitLog=/opt/rocketmq-cluster/node1/store/broker-a/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/opt/rocketmq-cluster/node1/store/broker-a/consumequeue
#消息索引存储路径
storePathIndex=/opt/rocketmq-cluster/node1/broker-a/index
#checkpoint 文件存储路径
storeCheckpoint=/opt/rocketmq-cluster/node1/store/checkpoint
#abort 文件存储路径
abortFile=/opt/rocketmq-cluster/node1/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

 

/opt/rocketmq-cluster/node1s/rocketmq-all-4.8.0-bin-release/conf/2m-2s-async/broker-a.properties(b-slave)

#所属集群名字
brokerClusterName=rocketmq-cluster
brokerName=broker-b
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-b,他的slave也叫broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.202.221:9876;192.168.202.222:9876
brokerIP1=192.168.202.221
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10920
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/opt/rocketmq-cluster/node1s/store/broker-b-s
#commitLog 存储路径
storePathCommitLog=/opt/rocketmq-cluster/node1s/store/broker-b-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/opt/rocketmq-cluster/node1s/store/broker-b-s/consumequeue
#消息索引存储路径
storePathIndex=/opt/rocketmq-cluster/node1s/store/broker-b-s/index
#checkpoint 文件存储路径
storeCheckpoint=/opt/rocketmq-cluster/node1s/store/checkpoint
#abort 文件存储路径
abortFile=/opt/rocketmq-cluster/node1s/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

/opt/rocketmq-cluster/node1/rocketmq-all-4.8.0-bin-release/conf/2m-2s-async/broker-a.properties(b-master)

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.202.221:9876;192.168.202.222:9876
brokerIP1=192.168.202.222
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/opt/rocketmq-cluster/node1/store/broker-b
#commitLog 存储路径
storePathCommitLog=/opt/rocketmq-cluster/node1/store/broker-b/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/opt/rocketmq-cluster/node1/store/broker-b/consumequeue
#消息索引存储路径
storePathIndex=/opt/rocketmq-cluster/node1/store/broker-b/index
#checkpoint 文件存储路径
storeCheckpoint=/opt/rocketmq-cluster/node1/store/checkpoint
#abort 文件存储路径
abortFile=/opt/rocketmq-cluster/node1/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

 

/opt/rocketmq-cluster/node1s/rocketmq-all-4.8.0-bin-release/conf/2m-2s-async/broker-a.properties(a-slave)

#集群名
brokerClusterName=rocketmq-cluster
brokerName=broker-a
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.202.221:9876;192.168.202.222:9876
brokeIP1=192.168.202.222
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10920
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/opt/rocketmq-cluster/node1s/store/broker-a-s
#commitLog 存储路径
storePathCommitLog=/opt/rocketmq-cluster/node1s/store/broker-a-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/opt/rocketmq-cluster/node1s/store/broker-a-s/consumequeue
#消息索引存储路径
storePathIndex=/opt/rocketmq-cluster/node1s/store/broker-a-s/index
#checkpoint 文件存储路径
storeCheckpoint=/opt/rocketmq-cluster/node1s/store/checkpoint
#abort 文件存储路径
abortFile=/opt/rocketmq-cluster/node1s/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

 

4.启动 mqnamesrv

nohup sh node1/rocketmq-all-4.8.0-bin-release/bin/mqnamesrv > /dev/null 2>&1 & (192.168.202.221)

nohup sh node1/rocketmq-all-4.8.0-bin-release/bin/mqnamesrv > /dev/null 2>&1 & (192.168.202.222)

 

5.启动broker

192.168.202.221:

nohup sh node1/rocketmq-all-4.8.0-bin-release/bin/mqbroker -c node1/rocketmq-all-4.8.0-bin-release/conf/2m-2s-async/broker-a.properties >node1/logs/broker-a.log 2>&1 &

nohup sh node1s/rocketmq-all-4.8.0-bin-release/bin/mqbroker -c node1s/rocketmq-all-4.8.0-bin-release/conf/2m-2s-async/broker-a.properties >node1s/logs/broker-a.log 2>&1 &

192.168.202.222:

nohup sh node1/rocketmq-all-4.8.0-bin-release/bin/mqbroker -c node1/rocketmq-all-4.8.0-bin-release/conf/2m-2s-async/broker-a.properties >node1/logs/broker-a.log 2>&1 &

nohup sh node1s/rocketmq-all-4.8.0-bin-release/bin/mqbroker -c node1s/rocketmq-all-4.8.0-bin-release/conf/2m-2s-async/broker-a.properties >node1s/logs/broker-a.log 2>&1 &

 

6.可以尝试查看各个启动情况:ps -ef | grep rocketmq

 

7.查看集群列表:sh node1/rocketmq-all-4.8.0-bin-release/bin/mqadmin clusterList -n localhost:9876

三、用java连接测试

注:先启动Consumer准备消费消息,再启动Producer生产消息测试

Producer

package com.qiaojun.rocketmq;

import com.aliyun.openservices.shade.com.alibaba.rocketmq.common.message.Message;
import com.aliyun.openservices.shade.com.alibaba.rocketmq.client.producer.DefaultMQProducer;
import com.aliyun.openservices.shade.com.alibaba.rocketmq.client.producer.SendResult;
import com.aliyun.openservices.shade.com.alibaba.rocketmq.remoting.common.RemotingHelper;


public class Producer {
    public static void main(String[] args) throws Exception {
        DefaultMQProducer producer = new DefaultMQProducer("unique_group_qiaojun_quickstart");
        producer.setNamesrvAddr("192.168.202.221:9876;192.168.202.222:9876");

        producer.setInstanceName("QuickStartProducer");
        producer.start();

        for (int i = 0; i < 5; i++) {
            try {
                Message msg = new Message("TopicTest_qiaojun",// topic
                        "TagA_qiaojun",// tag
                        ("发送测试消息" + i).getBytes(RemotingHelper.DEFAULT_CHARSET)// body
                );
                SendResult sendResult = producer.send(msg);

                System.out.println("发送结果:"+sendResult.toString());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        producer.shutdown();

    }
}

执行示例

 

Consumer 

package com.qiaojun.rocketmq;

import com.aliyun.openservices.shade.com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;
import com.aliyun.openservices.shade.com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import com.aliyun.openservices.shade.com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import com.aliyun.openservices.shade.com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import com.aliyun.openservices.shade.com.alibaba.rocketmq.common.consumer.ConsumeFromWhere;
import com.aliyun.openservices.shade.com.alibaba.rocketmq.common.message.Message;
import com.aliyun.openservices.shade.com.alibaba.rocketmq.common.message.MessageExt;

import java.util.List;

public class Consumer {
    public static void main(String[] args) throws Exception{
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("unique_group_qiaojun_quickstart");

//        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);

        consumer.setNamesrvAddr("192.168.202.221:9876;192.168.202.222:9876");
        consumer.setInstanceName("QuickStartConsumer");

        consumer.subscribe("TopicTest_qiaojun", "TagA_qiaojun");

//
        consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
            System.out.println(Thread.currentThread().getName() + " 接收新消息: " + msgs);
            for (Message msg :msgs){
                System.out.println("消息内容:"+new String(msg.getBody()));
            }
            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        });

//        consumer.registerMessageListener((MessageListenerConcurrently) (list, consumeConcurrentlyContext) -> {
//            for (MessageExt msg:list){
//                System.out.println(msg.getMsgId()+"---"+new String(msg.getBody()));
//            }
//            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
//        });
        consumer.start();
        System.out.println("消费者已启动");
    }
}

执行示例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
连接 RocketMQ 示例的步骤如下: 1. 下载 RocketMQ:首先,你需要下载 RocketMQ,可以在官方网站上获取最新的二进制文件。选择适合你操作系统的版本,并解压缩到你的计算机上。 2. 启动 Namesrv 和 Broker:在启动 RocketMQ 之前,需要首先启动 Namesrv(Name Server)和 Broker(消息代理)。Namesrv 用于管理和存储所有的 topic 和队列信息,而 Broker 用于处理消息的存储和传输。在解压后的 RocketMQ 文件夹中,找到 `bin` 目录,然后分别启动 Namesrv 和 Broker。 3. 创建示例项目:在连接 RocketMQ 示例之前,需要创建一个示例项目。可以用你熟悉的编程语言(如 Java)来创建一个项目,并引入 RocketMQ 的相关依赖。 4. 生产者示例:在示例项目中创建一个生产者示例。首先,创建一个生产者实例,并为其配置 NameServer 地址。然后,使用该生产者发送消息到指定的 topic。示例代码如下: ```java import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.common.message.Message; public class RocketMQProducerExample { public static void main(String[] args) throws Exception { // 实例化一个生产者对象 DefaultMQProducer producer = new DefaultMQProducer("ProducerGroup"); // 配置 NameServer 地址 producer.setNamesrvAddr("localhost:9876"); // 启动生产者 producer.start(); // 创建一个消息对象并发送 Message message = new Message("TopicTest", "TagA", "Hello RocketMQ".getBytes()); producer.send(message); // 关闭生产者 producer.shutdown(); } } ``` 5. 消费者示例:在示例项目中创建一个消费者示例。首先,创建一个消费者实例,并为其配置 NameServer 地址和消息处理逻辑。示例代码如下: ```java import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache.rocketmq.client.consumer.listener.*; import org.apache.rocketmq.common.message.MessageExt; public class RocketMQConsumerExample { public static void main(String[] args) throws Exception { // 实例化一个消费者对象 DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("ConsumerGroup"); // 配置 NameServer 地址 consumer.setNamesrvAddr("localhost:9876"); // 注册消息监听器 consumer.registerMessageListener(new MessageListenerConcurrently() { @Override public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) { // 处理消息逻辑 for (MessageExt msg : msgs) { System.out.println(new String(msg.getBody())); } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); // 订阅指定的 topic consumer.subscribe("TopicTest", "*"); // 启动消费者 consumer.start(); } } ``` 以上就是连接 RocketMQ 示例的基本步骤和简单示例代码。根据需要,你可以根据示例代码进行修改和扩展,以满足具体的业务需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值