在华为鲲鹏OpenEuler20.03系统上安装RocketMQ

简介: 在华为鲲鹏OpenEuler20.03系统上安装RocketMQ

背景


Apache RocketMQis a distributed messaging and streaming platform with low latency, high performance and reliability, trillion-level capacity and flexible scalability.


这里实验用的华为云鲲鹏服务器配置如下:


Huawei Kunpeng 920 2.6GHz
4vCPUs | 8GB
openEuler 20.03 64bit with ARM

连接机器后,先查看系统相关信息,注意这里是 aarch64 的,后续软件包也需要是 aarch64 版本的。

# 查看系统内核信息
[root@ecs-kunpeng-0005 ~]# uname -a
Linux ecs-kunpeng-0005 4.19.90-2003.4.0.0036.oe1.aarch64 #1 SMP Mon Mar 23 19:06:43 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
# 查看系统版本信息
[root@ecs-kunpeng-0005 ~]# cat /etc/os-release
NAME="openEuler"
VERSION="20.03 (LTS)"
ID="openEuler"
VERSION_ID="20.03"
PRETTY_NAME="openEuler 20.03 (LTS)"
ANSI_COLOR="0;31"


检查环境


RocketMQ 使用 Java 实现,因此首先需要有 Java 环境,而 openEuler 20.03 64bit with ARM 这个系统默认已经预装了 Java8

[root@ecs-kunpeng-0005 ~]# java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)


安装RocketMQ



# 解压
[root@ecs-kunpeng-0006 local]# unzip rocketmq-all-4.7.1-bin-release.zip
[root@ecs-kunpeng-0006 local]# mv rocketmq-all-4.7.1-bin-release rocketmq
[root@ecs-kunpeng-0006 local]# cd rocketmq
# 后台启动nameserver
[root@ecs-kunpeng-0006 rocketmq]# nohup sh bin/mqnamesrv &
# 查看nameserver启动日志
[root@ecs-kunpeng-0006 rocketmq]# tail -f ~/logs/rocketmqlogs/namesrv.log
# 查看nameserver进程
[root@ecs-kunpeng-0006 rocketmq]# jps
1557947 Jps
230238 NamesrvStartup
# 启动broker
[root@ecs-kunpeng-0006 rocketmq]# bin/mqbroker -n localhost:9876
  • 问题1:启动Broker时报错:

Error: VM option 'UseG1GC' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions. Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.


  • 解决方法:查看bin/mqbroker的脚本可发现,其中调用了runbroker.sh,编辑runbroker.sh,发现其中有UseG1GC的可选项(实验性的选项),删除这一行即可。


# 删除包含UseG1GC的一行配置
[root@ecs-kunpeng-0006 rocketmq]# vi bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
  • 问题2:
    There is insufficient memory for the Java Runtime Environment to continue. Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory. An error report file with more information is saved as: /usr/local/rocketmq/bin/hs_err_pid10503.log
# 编辑runbroker.sh
[root@ecs-kunpeng-0006 rocketmq]# vi bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
修改为:
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
# 尝试重新启动
[root@ecs-kunpeng-0006 rocketmq]# bin/mqbroker -n localhost:9876
The broker[ecs-kunpeng-0006, 172.17.0.1:10911] boot success. serializeType=JSON and name server is localhost:9876
# 查看进程
[root@ecs-kunpeng-0006 rocketmq]# jps
1657041 BrokerStartup
1659988 Jps
230238 NamesrvStartup
  • 问题3:前面步骤启动之后,无法通过公网访问

如果 rocketmq 部署在公网上,要通过外网访问时,需进行如下配置。

# 1. 在conf/broker.conf中添加:
[root@ecs-kunpeng-0006 rocketmq]# vi conf/broker.conf
brokerIP1=你的公网IP
# 2. 通过这条命令启动broker:
[root@ecs-kunpeng-0006 rocketmq]# bin/mqbroker -n 你的公网IP:9876 -c conf/broker.conf
The broker[broker-a, 你的公网IP:10911] boot success. serializeType=JSON and name server is 你的公网IP:9876
# 否则远程客户端报错:
org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout


基于SpringBoot的远程客户端


  1. pom.xml中添加依赖
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
    <version>4.7.1</version>
</dependency>
  1. 编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootRocketProducerApplicationTests {
    @Test
    public void producer() throws MQClientException, RemotingException, InterruptedException, MQBrokerException {
        DefaultMQProducer producer = new DefaultMQProducer("my-producer");
        producer.setNamesrvAddr("你的公网IP:9876");
        producer.start();
        Message message = new Message("myTopic01", "Hello RocketMQ!".getBytes());
        SendResult sendResult = producer.send(message);
        System.out.println("Message send Success, result: " + sendResult);
        producer.shutdown();
        System.out.println("Producer shutdown!");
    }
  1. 运行测试方法


  • 报错:No route info of this topic: myTopic01
  • 解决:配置启动broker时自动创建broker,附带参数:autoCreateTopicEnable=true
# 附带参数:autoCreateTopicEnable=true
[root@ecs-kunpeng-0006 rocketmq]# bin/mqbroker -n 你的公网IP:9876 -c conf/broker.conf autoCreateTopicEnable=true


  1. 验证主题是否创建成功,验证测试消息是否发送成功


这里可使用 RocketMQ 官方提供的 Web 管理控制台。下载地址:github.com/apache/rock…,本身也是个基于 SpringBootWeb 项目,启动前先修改为自己的 RocketMQ 地址,默认运行在 8080 端口。

image.png

image.png


后台启动broker


# 后台启动
[root@ecs-kunpeng-0006 rocketmq]# nohup sh bin/mqbroker -n 你的公网IP:9876 -c conf/broker.conf autoCreateTopicEnable=true &
# 查看启动日志
[root@ecs-kunpeng-0006 rocketmq]# tail -f ~/logs/rocketmqlogs/broker.log
# 查看启动进程
[root@ecs-kunpeng-0006 rocketmq]# jps
1971242 BrokerStartup
1972997 Jps
230238 NamesrvStartup


如何优雅停止


[root@ecs-kunpeng-0006 rocketmq]# sh bin/mqshutdown broker
[root@ecs-kunpeng-0006 rocketmq]# sh bin/mqshutdown namesrv


相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
7月前
|
消息中间件 Java 数据库
RocketMQ实战—9.营销系统代码初版
本文主要介绍了实现营销系统四大促销场景的代码初版:全量用户推送促销活动、全量用户发放优惠券、特定用户推送领取优惠券消息、热门商品定时推送。
RocketMQ实战—9.营销系统代码初版
|
7月前
|
消息中间件 搜索推荐 调度
RocketMQ实战—8.营销系统业务和方案介绍
本文详细介绍了电商营销系统的业务流程、技术架构及挑战解决方案。涵盖核心交易与支付后履约流程,优惠券和促销活动的发券、领券、用券、销券机制,以及会员与推送的数据库设计。技术架构基于Nacos服务注册中心、Dubbo RPC框架、RocketMQ消息中间件和XXLJob分布式调度工具,实现系统间高效通信与任务管理。针对千万级用户量下的推送和发券场景,提出异步化、分片处理与惰性发券等优化方案,解决高并发压力。同时,通过RocketMQ实现系统解耦,提升扩展性,并利用XXLJob完成爆款商品推荐的分布式调度推送。整体设计确保系统在大规模用户场景下的性能与稳定性。
RocketMQ实战—8.营销系统业务和方案介绍
|
4月前
|
物联网 Linux 开发者
快速部署自己私有MQTT-Broker-下载安装到运行不到一分钟,快速简单且易于集成到自己项目中
本文给物联网开发的朋友推荐的是GMQT,让物联网开发者快速拥有合适自己的MQTT-Broker,本文从下载程序到安装部署手把手教大家安装用上私有化MQTT服务器。
1326 5
|
7月前
|
消息中间件 NoSQL Java
RocketMQ实战—10.营销系统代码优化
本文主要介绍了如何对营销系统的四大促销场景的代码进行优化,包括:全量用户推送促销活动、全量用户发放优惠券、特定用户推送领取优惠券消息、热门商品定时推送。
|
消息中间件 Linux API
centos7 安装rabbitmq自定义版本及配置
centos7 安装rabbitmq自定义版本及配置
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
1049 2
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
消息中间件 数据安全/隐私保护 Docker
Docker安装rabbitmq
如何使用Docker安装和配置RabbitMQ服务,包括拉取RabbitMQ镜像、创建容器、配置持久化和访问管理界面的步骤。
1333 0
Docker安装rabbitmq
|
消息中间件 Docker 容器
消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】
这篇文章提供了RabbitMQ的安装和基本使用教程,包括如何使用Docker拉取RabbitMQ镜像、创建容器、通过浏览器访问管理界面,以及如何创建交换机、队列、绑定和使用direct、fanout和topic三种类型的交换器进行消息发布和接收的测试。
消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】
|
消息中间件 Linux
centos7安装rabbitmq
centos7安装rabbitmq
下一篇
oss云网关配置