Linux部署RocketMQ

部署环境:
1. Linux
2. 64bit JDK 1.8+

一、 RocketMQ部署

1.1 下载

RocketMQ下载地址

本文使用 4.9.8版本:

image

1.2 上传到指定目录下解压

unzip rocketmq-all-4.9.8-bin-release.zip

1.3 启动RocketMQ

RocketMQ的启动主要涉及到Namesrv(命名服务)Broker(消息存储和消费者服务)两部分,首先进入到bin路径下:

(1)启动Namesrv并设置输出日志位置:

nohup sh mqnamesrv > namesrv.log 2>&1 &

(2)启动Broker并设置输出日志位置

nohup sh mqbroker -n localhost:9876 > broker.log 2>&1 &

验证是否启动:

jps

显示下面的内容说明启动成功了:

image

 要是启动不成功,检查是不是内存不足 ,RocketMq默认的虚拟机内存较大,因而启动失败,需要编辑如下两个配置文件,修改jvm的内存大小:

//编辑runbroker.sh和runserver.sh修改默认的JVM大小
vim runbroker.sh
vim runserver.sh 

image

image

二、测试

(1)发送消息(生产者)

//设置环境变量
export NAMESRV_ADDR=localhost:9876
//使用安装包的demo发送消息,
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

成功示例:

image

(2) 接收消息(消费者)

//设置环境变量
export NAMESRV_ADDR=localhost:9876
//接收消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

成功示例:

image

 (3) 关闭RocketMQ

//关闭namesrv
sh bin/mqshutdown namesrv
//关闭Broker
sh bin/mqshutdown broker 

三、SpringBoot连接RocketMQ

3.1引入依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
	<version>2.3.5.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.apache.rocketmq</groupId>
	<artifactId>rocketmq-client</artifactId>
	<version>4.5.2</version>
</dependency>

3.2 添加配置 application.yml

 

rocketmq:
  nameServer: your-nameserver-ip  # Name Server地址
  producer:
    group: "test_producer_group"  # 生产者组名
    topic: "test_topic"   #订阅主题
  consumer:
    group: "test_consumer_group"  # 消费者组名
    topic: "test_topic"   #订阅主题
    subscription: "*"

 

3.3 创建生产者

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class RocketMQProducer {

    @Value("${rocketmq.nameServer}")
    private String nameServer;

    @Value("${rocketmq.producer.group}")
    private String producerGroup;

    public void sendMessage(String topic, String message) throws Exception {
        DefaultMQProducer producer = new DefaultMQProducer(producerGroup);
        producer.setNamesrvAddr(nameServer);
        producer.setSendMsgTimeout(6000);
        producer.start();
        // 创建消息对象,设置消息内容
        org.apache.rocketmq.common.message.Message msg = new org.apache.rocketmq.common.message.Message(topic, message.getBytes());
        // 发送消息
        producer.send(msg);
        producer.shutdown();
    }
}

3.4 创建消费者  

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
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.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class RocketMQConsumer {

    @Value("${rocketmq.name-server}")
    private String nameServer;

    @Value("${rocketmq.consumer.group}")
    private String consumerGroup;

    public void startConsumer(String topic) throws MQClientException {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroup);
        consumer.setNamesrvAddr(nameServer);
        // 订阅主题和标签,可以根据需要进行过滤
        consumer.subscribe(topic, "*");
        // 注册消息监听器
        consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
            for (org.apache.rocketmq.common.message.MessageExt msg : msgs) {
                System.out.println("Received message: " + new String(msg.getBody()));
            }
            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        });

        consumer.start();
    }
}

3.5 创建测试启动类

import order.rocketmq.RocketMQConsumer;
import order.rocketmq.RocketMQProducer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class RocketMQDemoApplication {

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(RocketMQDemoApplication.class, args);

        RocketMQProducer producer = context.getBean(RocketMQProducer.class);
        producer.sendMessage("my-topic", "Hello, RocketMQ!");
        RocketMQConsumer consumer = context.getBean(RocketMQConsumer.class);
        consumer.startConsumer("my-topic");
    }
}

可以正常发送接收消息:

image

 

参考资料:https://blog.csdn.net/qq_42785250/article/details/132517338

 

posted @ 2025-08-06 15:58  LuoTengteng  阅读(349)  评论(0)    收藏  举报