rocketMQ环境搭建

本文介绍了如何在Linxu环境中部署RocketMQ,包括下载编译、启动名称节点和 broker,以及解决启动失败、连接问题和自动创建topic的技巧。还涉及控制台搭建和消息收发实例,附带关键配置和解决步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Linxu环境下部署
官网地址:http://rocketmq.apache.org/docs/quick-start/

前提条件:64bit JDK 1.8+

下载编译好的安装包:
https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zip

Start Name Server

#前面nohup代表后台启动
nohup sh bin/mqnamesrv &
#查看启动日志
tail -f ~/logs/rocketmqlogs/namesrv.log

Start Broker

#前面nohup代表后台启动
nohup sh bin/mqbroker -n localhost:9876 &
#查看启动日志
tail -f ~/logs/rocketmqlogs/broker.log 

二、错误原因解决思路

1、如果是linux虚拟机下修改runbroker.sh和runserver.sh文件中JVM参数,默认参数设置的内存比较大,rocketmq会启动不成功

runbroker.sh中

原配置:JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"

修改为:JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx256m -Xmn256m"

runserver.sh中

原配置:JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

修改为:JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

2、连接不上broker,并出现RemotingConnectException: connect to <172.17.0.1:10911> failed

原因是:broker部署在虚拟机,并且虚拟双网卡,client无法正常连接服务端

解决: 在con/broker.conf配置文件中添加:

brokerIP1=服务器地址
namesrvAddr =服务器地址:9876     #(多个地址以;分隔)

启动broker才会生效

nohup sh bin/mqbroker -n 127.0.0.1:9876 -c ./conf/broker.conf &

3、No route info of this topic,不能自动创建topic

启动broker时添加autoCreateTopicEnable=true,代表自动创建topic
nohup sh bin/mqbroker -n 127.0.0.1:9876 autoCreateTopicEnable=true -c ./conf/broker.conf &

如果还不行,看下服务端版本号与客户端版本号是否一致,我现在用的版本号都是4.8.0

关闭broker和server语句

sh bin/mqshutdown broker

sh bin/mqshutdown namesrv

三、rocketmq控制台搭建
下载地址https://github.com/apache/rocketmq-externals,找到rocketmq-console工程,修改下application.properties文件中的rocketmq.config.namesrvAddr

在这里插入图片描述
把工程打成jar启动

java -jar D:\tools\rocketmq-console-ng-2.0.0.jar

在这里插入图片描述

四、消息接收和发送实例:

版本

<dependency>
     <groupId>org.apache.rocketmq</groupId>
     <artifactId>rocketmq-client</artifactId>
     <version>4.8.0</version>
 </dependency>

生产者:

package com.example.rocketmq.product;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

public class SyncProducer {
    public static void main(String[] args) throws Exception {
        //Instantiate with a producer group name.
        DefaultMQProducer producer = new
                DefaultMQProducer("please_rename_unique_group_name");
        // Specify name server addresses.
        producer.setNamesrvAddr("xx.xx.xx.xx:9876");
        //Launch the instance.
        producer.start();
        for (int i = 0; i < 2; i++) {
            //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);
        }
        //Shut down once the producer instance is not longer in use.
        producer.shutdown();
    }
}

日志

SendResult [sendStatus=SEND_OK, msgId=C0A8014F1B4418B4AAC221280DCD0000, offsetMsgId=C0A8198100002A9F00000000000052D6, messageQueue=MessageQueue [topic=TopicTest, brokerName=broker-a, queueId=9], queueOffset=8]
SendResult [sendStatus=SEND_OK, msgId=C0A8014F1B4418B4AAC221280E000001, offsetMsgId=C0A8198100002A9F000000000000539F, messageQueue=MessageQueue [topic=TopicTest, brokerName=broker-a, queueId=10], queueOffset=7]

消费者:

package com.example.rocketmq.consumer;

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.message.MessageExt;

import java.util.List;

public class Consumer {

    public static void main(String[] args) throws InterruptedException, MQClientException, MQClientException {

        // Instantiate with specified consumer group name.
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name");

        // Specify name server addresses.
        consumer.setNamesrvAddr("xx.xx.xx.xx:9876");

        // 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(), new String(msgs.get(0).getBody()));
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });

        //Launch the consumer instance.
        consumer.start();

        System.out.printf("Consumer Started.%n");
    }
}

日志

Consumer Started.
ConsumeMessageThread_1 Receive New Messages: Hello RocketMQ 1 
ConsumeMessageThread_2 Receive New Messages: Hello RocketMQ 0 
要在Linux上搭建RocketMQ环境,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了Java Development Kit(JDK)。你可以使用以下命令来检查是否已经安装了JDK: ``` java -version ``` 如果没有安装,请先安装JDK。 2. 下载RocketMQ压缩包。你可以从RocketMQ官方网站或者GitHub仓库上下载最新的稳定版本。 3. 解压RocketMQ压缩包。可以使用以下命令解压: ``` tar zxvf rocketmq-all-x.x.x-bin-release.zip ``` 4. 配置环境变量。打开你的`~/.bashrc`文件(或者其他适用的配置文件),并添加以下内容: ``` export ROCKETMQ_HOME=解压后的RocketMQ目录路径 export PATH=$PATH:$ROCKETMQ_HOME/bin ``` 5. 保存并关闭配置文件。然后执行以下命令以使配置生效: ``` source ~/.bashrc ``` 6. 配置RocketMQ。进入RocketMQ目录,并编辑`conf/broker.conf`和`conf/namesrv.conf`文件,根据你的需求进行配置。主要配置项包括监听IP、端口、存储路径等。 7. 启动Name Server。执行以下命令启动Name Server: ``` nohup sh bin/mqnamesrv & ``` 8. 启动Broker Server。执行以下命令启动Broker Server: ``` nohup sh bin/mqbroker -n localhost:9876 & ``` 9. 验证RocketMQ是否成功启动。你可以通过查看日志文件或者执行以下命令来验证RocketMQ是否成功启动: ``` tail -f ~/logs/rocketmqlogs/namesrv.log tail -f ~/logs/rocketmqlogs/broker.log ``` 现在,你已经成功在Linux上搭建RocketMQ环境。你可以使用RocketMQ提供的命令行工具或者编写代码来使用RocketMQ进行消息传递。 请注意,以上步骤仅适用于Linux环境。如果你使用的是其他操作系统,请参考相应的文档进行配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值