Linux部署RocketMQ
部署环境:
1. Linux
2. 64bit JDK 1.8+
一、
1.3 启动
三、
1. Linux
2. 64bit JDK 1.8+
一、 RocketMQ部署
1.1 下载
本文使用 4.9.8版本:

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
显示下面的内容说明启动成功了:

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


二、测试
(1)发送消息(生产者)
//设置环境变量 export NAMESRV_ADDR=localhost:9876 //使用安装包的demo发送消息, sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
成功示例:

(2) 接收消息(消费者)
//设置环境变量 export NAMESRV_ADDR=localhost:9876 //接收消息 sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
成功示例:

(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");
}
}
可以正常发送接收消息:

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

浙公网安备 33010602011771号