• RocketMQ入门之学习环境搭建



    在这里插入图片描述

    0.前言

    在学习RocketMQ 需要先自行搭建一个RocketMQ 服务端。本节我们先来搭建一个简单的学习环境。下个章节,我们写个简单的Spring Boot 集成RocketMQ示例项目理解和验证一下RocketMQ的特性。
    如果已经安装了RocketMQ 学习环境可以略过此章节《【实践篇(二)】SpringBoot集成Apache RocketMQ详解》

    1.使用docker 方式搭建RocketMQ学习环境

    推荐使用docker 方式

    1. 从docker hub 上搜索 Apache RocketMQ 获得到最新版本为rocketmq-5.1.3
      latest tag的说明
      在这里插入图片描述

    非常好,我们将使用Docker来安装RocketMQ,这是一个非常简单且有效的方式。下面是详细的步骤:

    1. 安装并启动Docker
      如果你还没有安装Docker,你可以从Docker官方网站下载并安装。安装完成后,确保Docker已经启动。

    2. 拉取RocketMQ的Docker镜像

    docker pull apache/rocketmq
    
    • 1

    在这里插入图片描述
    3. 启动NameServer
    RocketMQ的工作需要依赖于一个NameServer。输入以下命令来启动一个NameServer:

    启动容器

    docker run -itd --restart=always --name rmqnameserver --privileged=true -p 9876:9876   -e "MAX_POSSIBLE_HEAP=100000000" apache/rocketmq sh mqnamesrv 
    
    • 1
    #查看容器进程
    docker ps -a
    #查看日志 
    docker logs -f 容器id
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    如果报错openJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000006c8000000, 4160749568, 0) failed; error=‘Cannot allocate memory’ (errno=12)。先去掉后面的启动命令sh mqnamesrv 。先把容器启动起来,进容器修改脚本,然后手动在容器执行 sh mqnamesrv .

    1. 启动Broker
      接着,我们需要启动一个Broker。输入以下命令来启动Broker:

      docker run -d --restart=always --name rmqbroker --link rmqnamesrv:namesrv -p 10909:10909 -p 10911:10911 -p 10912:10912 -v D:/app/rocketmq/data/broker/logs:/home/rocketmq/logs -v D:/app/rocketmq/data/broker/store:/home/rocketmq/store -v D:/app/rocketmq/data/broker/conf/broker.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" apache/rocketmq:4.9.4 sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
      
      
      • 1
      • 2
    brokerClusterName = DefaultCluster
    brokerName = broker-a
    brokerId = 0
    deleteWhen = 04
    fileReservedTime = 48
    brokerRole = ASYNC_MASTER
    flushDiskType = ASYNC_FLUSH
    
    namesrvAddr=172.20.6.37:9876
    brokerIP1=172.20.6.37
    defaultTopicQueueNums=4
    autoCreateTopicEnable=true
    autoCreateSubscriptionGroup=true
    listenPort=10911
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    启动NameServer和 启动Broker常见报错

    在服务器环境 内存不足的情况下会报错。
    内存不足报错

    penJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000006c8000000, 4160749568, 0) failed; error='Cannot allocate memory' (errno=12)
    #
    # There is insufficient memory for the Java Runtime Environment to continue.
    # Native memory allocation (mmap) failed to map 4160749568 bytes for committing reserved memory.
    # An error report file with more information is saved as:
    # /home/rocketmq/rocketmq-4.9.2/bin/hs_err_pid61.log
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    解决办法
    启动命令 不要带 sh mqbroker 或 先把容器启动起来进容器,修改启动脚本的参数 手动启动 mqbroker

    runbroker.sh 修改这个脚本的参数 拉到最底下。
    在这里插入图片描述
    重新启动OK
    在容器内执行

    # 容器内执行
    nohup sh mqbroker &
    # 查看日志
    tail -f nohup.out
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    1. 验证安装
      你可以通过访问 http://ip:9876 来访问RocketMQ的Dashboard,从而验证RocketMQ是否已经成功安装并运行。
      在这里插入图片描述
      在这里插入图片描述

    2.使用源码安装方式

    在CentOS 7上安装RocketMQ学习环境

    1. 安装JDK
    如果服务器没有jdk 需要安装
    RocketMQ需要Java环境,推荐使用Java 8。可以通过以下命令进行安装:

    sudo yum install java-1.8.0-openjdk-devel
    
    • 1

    安装完成后,通过java -version确认JDK安装成功。

    2. 下载并解压RocketMQ

    下载RocketMQ的tar包,这里以4.7.1版本为例:

    wget https://archive.apache.org/dist/rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip
    
    • 1

    解压缩:

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

    3. 启动RocketMQ

    首先启动Name Server:

    cd rocketmq-all-4.7.1-bin-release/bin
    nohup sh mqnamesrv &
    
    • 1
    • 2

    然后,启动Broker:

    nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true &
    
    • 1

    4. 验证RocketMQ是否启动成功

    通过以下命令,如果看到Broker的信息,那么恭喜你,RocketMQ已经启动成功:

    sh mqadmin clusterList -n localhost:9876
    
    • 1

    3. 常见问题

    RocketMQ的官方GitHub问题链接:RocketMQ Issues
    2. 内存不足问题:RocketMQ需要足够的内存才能运行。如果出现内存不足的错误,你可以增加系统的内存,或者调整RocketMQ的内存配置。我的学习环境服务器配置比较低,安装过程出现了内存不足情况,解决方法修改了启动脚本中的内存设置,直接给一个比较小的值,就ok了。
    3. 端口冲突问题:如果RocketMQ的端口(默认为10911和10909)已经被其他应用程序占用,RocketMQ将无法启动。你可以更改RocketMQ的端口,或者停止占用这些端口的应用程序。
    4. 启动脚本问题:RocketMQ的启动脚本有一些特殊的要求,如果不正确地修改了这些脚本,可能会导致RocketMQ启动失败。
    5. 兼容性问题:RocketMQ可能不兼容某些特定的操作系统或JDK版本。你需要确保你的环境满足RocketMQ的系统要求。
    6. broker的IP配置问题,如果docker 安装需要将Broker的Ip配置成宿主机IP.不然在发送消息的时候报错,连接Broker失败。解决办法,进到容器里。进入conf 目录修改Broker.conf 添加brokerIP1 = 你的宿主机IP

    2023-09-09 16:44:14.984 ERROR 22980 --- [nio-8080-exec-1] o.a.r.spring.core.RocketMQTemplate       : syncSend failed. destination:test-topic, message:GenericMessage [payload=test a msg, headers={id=be655749-804a-f36e-40f5-c160c74e4ff0, timestamp=1694249048593}] 
    2023-09-09 16:44:15.000 ERROR 22980 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.messaging.MessagingException: Send [3] times, still failed, cost [6386]ms, Topic: test-topic, BrokersSent: [698f11314447, 698f11314447, 698f11314447]
    See http://rocketmq.apache.org/docs/faq/ for further details.; nested exception is org.apache.rocketmq.client.exception.MQClientException: Send [3] times, still failed, cost [6386]ms, Topic: test-topic, BrokersSent: [698f11314447, 698f11314447, 698f11314447]
    See http://rocketmq.apache.org/docs/faq/ for further details.] with root cause
    
    org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <172.17.0.8:10911> failed
    	at org.apache.rocketmq.remoting.netty.NettyRemotingClient.invokeSync(NettyRemotingClient.java:392) ~[rocketmq-remoting-4.5.2.jar:4.5.2]
    	at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessageSync(MQClientAPIImpl.java:465) ~[rocketmq-client-4.5.2.jar:4.5.2]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3. 参考文档

    https://juejin.cn/post/7253000004164878391

  • 相关阅读:
    ssm人事管理系统
    项目管理必备工具推荐:提高效率、协作与跟踪的实用工具盘点
    CF思维训练,2020长春CCPC(A,D)
    使用Nginx和uwsgi在自己的服务器上部署python的flask项目
    Git常用命令diff和mv
    IO作业:使用函数 使用线程实现,实现能够随时收发,即AB可以 随时 互相收发消息:提示 用多线程 或者多进程
    Java:Java有多流行,有哪些主要应用程序?
    GStreamer安装——Linux
    NOIP2023模拟1联测22 黑暗料理
    微信小程序WeUI项目weui-miniprogram如何运行起来?
  • 原文地址:https://blog.csdn.net/wangshuai6707/article/details/132776763