RocketMQ笔记(五):搭建RocketMQ运行环境

  详细部署方式可以参考官网:官网RocketMQ部署方式

一、环境准备

1.1、JDK环境准备

  详情参考:Linux搭建JDK环境

1.2、RocketMQ准备

1、下载RocketMQ

  下载RocketMQ地址:rocketmq-all-4.7.1-bin-release.zip

2、将RocketMQ上传至服务器

  本次上传地址:/usr/local/develop/RocketMQ 

 

3、解压RocketMQ压缩包

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

  若出现unzip: command not found,则参考yun源依赖处理。

 

二、RocketMQ配置

2.1、日志输出处理

  创建logs文件夹

2.2、修改配置文件内存(如果内存可以修改)

1、修改runserver.sh内存

  在bin目录下,有一个runserver.sh文件,我们打开它,修改以下配置:

vi /usr/local/develop/RocketMQ/rocketmq-all-4.7.1-bin-release/bin/runserver.sh

# 这是修改后的样子
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

2、修改runbroker.sh内存

  在bin目录下,有一个runbroker.sh文件,我们打开它,修改以下配置:

vi /usr/local/develop/RocketMQ/rocketmq-all-4.7.1-bin-release/bin/runbroker.sh

# 这是修改后的样子
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

3、修改tools.sh内存

  在bin目录下,有一个tools.sh文件,我们打开它,修改以下配置:

vi /usr/local/develop/RocketMQ/rocketmq-all-4.7.1-bin-release/bin/tools.sh

# 这是修改后的样子
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"

2.3、broker.conf配置修改

  在conf目录下的broker.conf文件中我们需要加入如下配置:

# 这个 brokerName 属性最好自己改一下,然后最后再broker启动日志一定要对应上这个名称
brokerName = broker
# 当生产者生产的topic没有的话,这个topic会被mq自己创建
autoCreateTopicEnable=true

# 其中的ip是自己部署rocketmq服务的地址
# NameServer的地址,如果有多个的话,使用分号分隔开
namesrvAddr=192.168.33.55:9876
# 当前broker监听的IP地址
brokerIP1=192.168.33.55
# broker对外服务的监听端口
listenPort=10911

三、RocketMQ启动

1、启动namesrv

1.1、切换到bin目录下

cd /usr/local/develop/RocketMQ/rocketmq-all-4.7.1-bin-release/bin

1.2、启动namesrv

nohup ./mqnamesrv >../logs/namesrv.log &

1.3、验证namesrv是否启动成功

1、命令查看

jps

2、日志查看

view ../logs/namesrv.log

2、启动broker

2.1、执行broker启动命令

# >../logs/broker.log   > 负号后面跟的是日志输出路径
# ip是配置部署rocketmq的ip
# nohup ./mqbroker -n ip:9876 -c ../conf/broker.conf  >../logs/broker.log &
nohup ./mqbroker -n 192.168.33.55:9876 -c ../conf/broker.conf  >../logs/broker.log &

2.2、验证是否启动成功

1、查看日志

view ../logs/broker.log

2、jps命令查看

3、启动RocketMQ脚本整理

3.1、创建目录

  创建存放启动命令的脚本目录:/usr/local/start

cd /usr/local
mkdir start

3.2、新建RocketMQ启动命令脚本

touch start_rocket.sh

3.3、start_rocket.sh脚本

#!/bin/sh
cd /usr/local/develop/RocketMQ/rocketmq-all-4.7.1-bin-release/bin
echo 'start namesrv...'
nohup ./mqnamesrv >../logs/namesrv.log &
echo 'start namesrv finish...'
echo 'start broker...'
nohup ./mqbroker -n 192.168.33.55:9876 -c ../conf/broker.conf  >../logs/broker.log &
echo 'start broker...'
jps

  为start_rocket.sh脚本赋予执行权限。

sudo chmod 777 start_rocket.sh

3.4、脚本执行结果

   通过jps命令,namesrv、broker都已启动成功,脚本验证成功。

四、测试消息收发

4.1、工具测试消息收发

1、切换到RocketMQ解压目录

cd /usr/local/develop/RocketMQ/rocketmq-all-4.7.1-bin-release

2、测试生产者

# 生产者生产1000条消息
bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

3、测试消费者

# 消费者消费1000条消息
bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

4.2、SDK测试消息收发

  新建maven工程,用于测试SDK消息收发。

1、引入依赖pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.snails</groupId>
    <artifactId>snails-mq</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <rocketmq-client-version>5.0.0</rocketmq-client-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>${rocketmq-client-version}</version>
        </dependency>
    </dependencies>

</project>

2、生产者示例

 1 import org.apache.rocketmq.client.exception.MQBrokerException;
 2 import org.apache.rocketmq.client.exception.MQClientException;
 3 import org.apache.rocketmq.client.producer.DefaultMQProducer;
 4 import org.apache.rocketmq.client.producer.SendResult;
 5 import org.apache.rocketmq.common.message.Message;
 6 import org.apache.rocketmq.remoting.common.RemotingHelper;
 7 import org.apache.rocketmq.remoting.exception.RemotingException;
 8 import java.io.UnsupportedEncodingException;
 9 
10 /**
11  * @Description: SDK同步发送消息测试
12  * @author: snails
13  * @since: 2022/12/29 16:29
14  */
15 public class SyncProducerTest {
16     public static void main(String[] args) throws MQClientException, UnsupportedEncodingException, MQBrokerException, RemotingException, InterruptedException {
17         // 实例化生产者组名称
18         DefaultMQProducer producer = new DefaultMQProducer("test-group");
19         // 指定name server地址
20         producer.setNamesrvAddr("192.168.33.55:9876");
21         // 启动生产者实例
22         producer.start();
23         for (int i = 0; i < 3; i++) {
24             // 创建消息实例,并指定主题、消息标签、消息内容
25             Message msg = new Message("TestTopic" /* Topic */,"TagA" /* Tag */,
26                     ("订单 -- " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
27             );
28             // 发送消息至RocketMQ服务端
29             String orderMsg = new String(msg.getBody(), "UTF-8");
30             System.out.println("发送订单消息:" + orderMsg);
31             SendResult sendResult = producer.send(msg);
32             System.out.printf("消息发送结果:%s%n", sendResult);
33         }
34         // 关闭不再使用的生产者实例
35         producer.shutdown();
36     }
37 }

3、消费者示例

 1 import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
 2 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
 3 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
 4 import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
 5 import org.apache.rocketmq.client.exception.MQClientException;
 6 import org.apache.rocketmq.common.message.MessageExt;
 7 import java.io.UnsupportedEncodingException;
 8 import java.util.List;
 9 
10 /**
11  * @Description: SDK同步消费消息测试
12  * @author: snails
13  * @since: 2022/12/29 17:37
14  */
15 public class SyncConsumerTest {
16     public static void main(String[] args) throws MQClientException {
17 
18         // 实例化消费者组名称
19         DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("test-group");
20         // 指定name server地址
21         consumer.setNamesrvAddr("192.168.33.55:9876");
22         // 订阅至少一个主题以供消费
23         consumer.subscribe("TestTopic", "*");
24         //  注册回调,处理从服务端获取的消息
25         consumer.registerMessageListener(new MessageListenerConcurrently() {
26             @Override
27             public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
28                 for (MessageExt msg : msgs) {
29                     try {
30                         System.out.println(String.format("线程%s,接收订单:%s", Thread.currentThread().getName(), new String(msg.getBody(), "UTF-8")));
31                     } catch (UnsupportedEncodingException e) {
32                         // TODO 补偿机制
33                         System.out.println(e.getMessage());
34                     }
35                 }
36                 // 消费消息确认
37                 return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
38             }
39         });
40         // 启动消费者实例
41         consumer.start();
42         System.out.printf("消费者已启动.%n");
43     }
44 }

4、测试结果

  生产者生产消息:

  

  消费者消费消息: 

  0

六、RocketMQ控制台

1、项目下载

  RocketMQ控制台项目地址:https://gitee.com/sunny_umbrella/rocketmq-dashboard.git

2、配置修改

  下载好后在IDEA中打开项目,并修改application.yml配置文件中的 namesrvAddrs 属性

  

  修改ip即可。

3、执行App.java

  出现如下信息代表启动成功。

 

4、验证是否启动成功

  浏览器访问:http://127.0.0.1:8080/#/

  

七、关闭namesrv与broker

1、关闭namesrv

·执行关闭命令

sh mqshutdown namesrv

·jps查看是否关闭成功

  namesrv已经成功关闭。

2、关闭broker

·执行关闭命令

sh mqshutdown broker

·jps查看是否关闭成功

3、关闭RocketMQ脚本整理

3.1、创建目录

  创建存放启动命令的脚本目录:/usr/local/stop

cd /usr/local
mkdir stop

3.2、新建RocketMQ关闭命令脚本

touch stop_rocket.sh

3.3、stop_rocket.sh脚本

#!/bin/sh
cd /usr/local/develop/RocketMQ/rocketmq-all-4.7.1-bin-release/bin
echo 'stop namesrv...'
sh mqshutdown namesrv &
echo 'stop namesrv finish...'
echo 'stop broker...'
sh mqshutdown broker &
echo 'stop broker finish...'
jps

  为stop_rocket.sh脚本赋予执行权限。

 sudo chmod 777 stop_rocket.sh 

3.4、脚本执行结果

八、yum源依赖

  安装依赖环境

sudo yum install -y yum-utils

  出现如下问题,无法安装yum-utils-1.1.31-54.el7_8.noarch对应的依赖:

yum-utils-1.1.31-54.el7_8.noarch: [Errno 256] No more mirrors to try. 

 

解决方案:手动安装yum所依赖的包

curl -O https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/rpm-4.11.3-45.el7.x86_64.rpm
curl -O https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch.rpm
curl -O https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-utils-1.1.31-54.el7_8.noarch.rpm
curl -O https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-rhn-plugin-2.0.1-10.el7.noarch.rpm
curl -O https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
curl -O https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-3.4.3-168.el7.centos.noarch.rpm
# unzip解压依赖包
curl -O https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/unzip-6.0-21.el7.x86_64.rpm

  可以执行以下命令全部安装:

rpm -ivh yum* --force --nodeps

  出现如下界面表示yum-utils安装成功

 

   也可以单个安装

rpm -ivh unzip-6.0-21.el7.x86_64.rpm  --force --nodeps

  安装成功界面

 

 

posted @ 2023-05-04 17:25  无虑的小猪  阅读(420)  评论(0编辑  收藏  举报