Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >
场景说明

自建云服务器搭建 RocketMQ,因为是自建的服务器,所以走不了公网 IP,如果用 docker 部署的话涉及到端口的监听问题,所以现在在服务器上直接部署的方案。

RocketMQ安装及配置
相关命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#如果服务器没有部署 Java 环境需要安装
sudo yum update -y
# 安装jdk1.8
sudo yum install java-1.8.0-openjdk -y
#配置jdk环境 根据自己终端设置
vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
export PATH=$PATH:$JAVA_HOME/bin
source ~/.bashrc
#查看是否配置成功
java -version
#下载rocketmq,可能下载比较慢 可以从阿里的镜像站下载 传到自己的服务器)
wget https://archive.apache.org/dist/rocketmq/5.3.1/rocketmq-all-5.3.1-bin-release.zip
#解压缩
mv rocketmq-all-5.3.1-bin-release.zip /opt/rocketmq
unzip rocketmq-all-5.3.1-bin-release.zip
RocketMQ相关配置
配置信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#找到自己RockeMQ 解压包位置
cd /opt/rocketmq/rocketmq-all-5.3.1-bin-release/
vim conf/broker.conf
brokerIP1 = (公网ip)
namesrvAddr = 127.0.0.1:9876
autoCreateTopicEnable = true # 自动创建topic 根据自己需要设置

#配置broken启动空见大小 默认内存是4G我这小的开发版可受不了

vim bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m" # 初始堆与最大堆大小均为512m
JAVA_OPT="${JAVA_OPT} -Xmn256m" # 年轻代大小为256m

# 配置namesrv启动空间大小
vim bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
启动
相关命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# nohup: 退出终端不会影响程序的运行。
# &:让命令在后台执行, 退出终端不再执行。
# 注意自己的文件目录
nohup sh bin/mqnamesrv &


# 此处一定要加上--enable-proxy, 否则本地无法访问到云服务上的rocketmq, 因为即便配置了brokerIP1为
公网ip, nameserver上记录的broker的ip地址仍然为私网ip,而非公网ip
nohup sh bin/mqbroker -n localhost:9876 --enable-proxy &

#对应关闭命令
# 关闭命令(或jps 再kill进程pid):
sh bin/mqshutdown broker
sh bin/mqshutdown namesrv
RocketMQ-Dashboard安装
相关命令操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 下载 建立从阿里云镜像站下载 然后上传到服务器
wget https://dist.apache.org/repos/dist/release/rocketmq/rocketmq-dashboard/2.0.0/rocketmq-dashboard-2.0.0-source-release.zip

# 解压
rm rocketmq-dashboard-2.0.0-source-release.zip /opt/rocketmq-dashboard
unzip rocketmq-dashboard-2.0.0-source-release.zip

# 需要用到maven 先下载maven(本地下载,直接上传速度更快)
# 配置环境变量 当然你可以本地打好 jar 包然后上传到服务器运行
vim ~/.bashrc
export M2_HOME=/opt/maven/apache-maven-3.9.2
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
source ~/.bashrc

# 打包
mvn clean package -Dmaven.test.skip=true

# 配置阿里云安全组中端口9090(dashboard启动端口)、10909、10911、9876开放
# 配置linux防火墙9090、10909、10911、9876端口开放


# 启动dashboard
java -jar /opt/rocketmq-dashboard/rocketmq-dashboard-2.0.0.jar --server.port=9090
#后台运行
nohup java -jar /opt/rocketmq-dashboard/rocketmq-dashboard-2.0.0.jar --server.port=9090 &

访问本地9090端口便可以查看dashboard界面

简单样例

创建一个简单的使用demo

首先创建一个maven工程,导入RocketMQ的依赖

1
2
3
4
5
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>5.1.3</version>
</dependency>

创建一个生产者

代码样例
1
2
3
4
5
6
7
8
9
10
11
12
13
public class SyncProducer {
public static void main(String[] args) throws MQClientException, MQBrokerException, RemotingException, InterruptedException {
DefaultMQProducer producer = new DefaultMQProducer("SyncProducer");
producer.setNamesrvAddr("IP:9876");
producer.start();
for (int i = 0; i < 2; i++) {
Message message = new Message("best","Tags", (i+"_SyncProducer").getBytes(StandardCharsets.UTF_8));
SendResult send = producer.send(message);
System.out.println("消息发送成功: " + i + send.toString() );
}
producer.shutdown();
}
}

创建一个消费者

代码样例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class SimpleConsumer {
public static void main(String[] args) throws MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("SimpleConsumer");
consumer.setNamesrvAddr("IP:9876");
consumer.subscribe("best","*");
consumer.setMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
for (int i = 0; i < list.size(); i++) {
System.out.println(i+"_消息消费成功" +" " + new String(list.get(i).getBody()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
System.out.println("consumer run");
}
}

消息发送成功

image-20250304153454172

消息接收成功

image-20250304153514782

dashboard 也会展示相应的数据

image-20250304153900392

评论