RocketMQ的安装和配置介绍

一、RocketMQ 的介绍

  1. RocketMQ

    Apache RocketMQ 是一款低延迟、高并发、高可用、高可靠的分布式消息中间件。消息队列 RocketMQ 可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。

  2. RocketMQ 概念

    • Producer(生产者):
      生产者负责生成并发送消息到消息队列。通常,生产者是业务系统的组件,例如订单处理系统生成订单消息并发送到队列中。
    • Consumer(消费者):
      消费者从消息队列中获取并处理消息。消费者可以是多个,并且可以分为两种类型:
      Push Consumer:主动接收消息。
      Pull Consumer:主动从队列中拉取消息。
    • Topic(主题):
      Topic 是消息的逻辑分类,每个 Topic 代表一个消息类别。生产者将消息发送到特定的 Topic,消费者订阅并消费特定 Topic 下的消息。
    • Message(消息):
      消息是 RocketMQ 传输的最小单位。消息体可以是任意的字节数组,通常为 JSON、XML 或其他序列化格式。
    • Broker(消息代理):
      Broker 是消息中间件的核心组件,负责接收、存储、转发消息。Broker 通过 Topic 和队列管理消息,并确保消息的可靠传输。
    • NameServer:
      NameServer 是轻量级的服务发现和路由管理组件,Broker 和生产者、消费者通过它来发现彼此的地址,并完成消息的路由。
    • Queue(队列):
      每个 Topic 可以有多个队列(Partition),消息会根据一定的策略分发到不同的队列中。多个消费者可以并行消费同一个 Topic 下的不同队列,提高吞吐量。
    • Tag(标签):
      Tag 是用于对消息进行进一步分类的标记,帮助消费者过滤消息。例如,在一个 Topic 下,可以根据不同的标签过滤出特定类型的消息进行消费。
    • Order Message(顺序消息):
      顺序消息是 RocketMQ 提供的一种消息投递方式,保证同一生产者发送的消息按顺序到达同一消费者。
    • Transactional Message(事务消息):
      RocketMQ 支持分布式事务消息。生产者可以发送半消息(half message),消费者暂时不会消费,直到生产者确认事务提交,RocketMQ 才会将消息推送给消费者。
  3. 为什么 RocketMQ

    在阿里孕育 RocketMQ 的雏形时期,我们将其用于异步通信、搜索、社交网络活动流、数据管道,贸易流程中。随着我们的贸易业务吞吐量的上升,源自我们的消息传递集群的压力也变得紧迫。
    根据我们的研究,随着队列和虚拟主题使用的增加,ActiveMQ IO 模块达到了一个瓶颈。我们尽力通过节流、断路器或降级来解决这个问题,但效果并不理想。于是我们尝试了流行的消息传递解决方案 Kafka。不幸的是,Kafka 不能满足我们的要求,其尤其表现在低延迟和高可靠性方面,详见下文。在这种情况下,我们决定发明一个新的消息传递引擎来处理更广泛的消息用例,覆盖从传统的 pub/sub 场景到高容量的实时零误差的交易系统。
    Apache RocketMQ 自诞生以来,因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨,RocketMQ 已经成为业内共识的金融级可靠业务消息首选方案,被广泛应用于互联网、大数据、移动互联网、物联网等领域的业务场景。

二、RocketMQ 的安装

  1. 本地部署
    下载地址

    • Window
      下载完后解压到自定义目录,MQ 解压路径\rocketmq-all-5.3.0-bin-release;
      {% note warning modern %}
      注意 (Windows11 系统解压路径不要出现空格)
      {% endnote %}
      {% note warning modern %}
      注意 ( 同时安装的 jdk 路径也不能有空格,不然会提示启动 NameServer 会出现“此时不应有 XXXX”XX:JDK 路径)
      {% endnote %}
      配置环境变量
      配置环境变量,变量名:ROCKETMQ_HOME 变量值:(你的解压路径);path 后追加;%ROCKETMQ_HOME%\bin
      系统环境变量
      启动 NameServer
      可启动 cmd 命令执行进入至‘安装的 MQ 目录\bin’下,执行命令‘start mqnamesrv.cmd’,启动 NAMESERVER。成功后会弹出提示框;
      或直接使用 mqnamesrv.cmd 双击运行

      //RockerMQ 配置 Broker 密码
      在 rocketMQ 安装目录下的 conf 文件夹-broker.conf,设置
      brokerPermission=password //开启密码

      plainTextAccessKey=root //设置账户名
      plainTextSecretKey=123456 //设置密码

      启动 Broker
      在安装目录 bin 下 cmd

          $ start mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true
      

      进入至‘MQ 文件夹\bin’下,修改 runbroker.cmd 中 JVM 占用内存大小
      修改JVM内存
      启动后窗口不可关闭。也可以看设置服务启动。

      rocketmq 控制台安装及配置
      下载地址
      解压后,修改源码中 src 里面的 application.properties 配置文件 端口号:19876(防止端口冲突 9876 为 mq 端口)
      同时添加密码检验,如果没有设置密码则不用修改

      #set the accessKey and secretKey if you used acl
      rocketmq.config.accessKey=root
      rocketmq.config.secretKey=123456
      rocketmq.config.useTLS=true
      
     进入解压根目录执行 mvn 打包命令
    
     ```shell
         mvn clean package -Dmaven.test.skip=true
    

    生成的 target 下将有 rocketmq-dashboard-1.0.0.jar 包。
    RocketMQ 注册为 Windows 服务
    下载地址
    选中下载

    在 RocketMQ 目录上新建文件夹 admin,并将上述生成的 rocketmq-dashboard-1.0.0.jar 包放入其中

    同时在根目录新建文件 start.bat

    start .\bin\mqnamesrv.cmd
    start .\bin\mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true
    java -jar .\admin\rocketmq-dashboard-1.0.0.jar
    

    文件目录
    nssm 下载后解压,选择相应的系统,并在目录上执行:nssm install RocketMQ
    选择
    添加window服务
    并确定即可启动服务

    • Linux
      这里以在 Linux 环境下利用社区 5.3.0 的源码包为例,介绍 RocketMQ 安装过程。
      解压 5.3.0 的源码包并编译构建二进制可执行文件

      $ unzip rocketmq-all-5.3.0-source-release.zip
      $ cd rocketmq-all-5.3.0-source-release/
      $ mvn -Prelease-all -DskipTests -Dspotbugs.skip=true clean install -U
      $ cd distribution/target/rocketmq-5.3.0/rocketmq-5.3.0
      

      启动服务

          ### 启动namesrv
          $ nohup sh bin/mqnamesrv &
      
          ### 验证namesrv是否启动成功
          $ tail -f ~/logs/rocketmqlogs/namesrv.log
          The Name Server boot success...
      
  2. Docker 部署 RocketMQ

    • 拉取 RocketMQ 镜像

        docker pull apache/rocketmq:5.3.0
      
    • 创建容器共享网络

       docker network create rocketmq
      
    • 启动 NameServer

         # 启动 NameServer
         docker run -d --name rmqnamesrv -p 9876:9876 --network rocketmq apache/rocketmq:5.3.0 sh mqnamesrv
      
         # 验证 NameServer 是否启动成功
         docker logs -f rmqnamesrv
      
    • 启动 Broker+Proxy

         # 配置 Broker 的IP地址
         echo "brokerIP1=127.0.0.1" > broker.conf
      
         # 启动 Broker 和 Proxy
         docker run -d \
         --name rmqbroker \
         --network rocketmq \
         -p 10912:10912 -p 10911:10911 -p 10909:10909 \
         -p 8080:8080 -p 8081:8081 \
         -e "NAMESRV_ADDR=rmqnamesrv:9876" \
         -v ./broker.conf:/home/rocketmq/rocketmq-5.3.0/conf/broker.conf \
         apache/rocketmq:5.3.0 sh mqbroker --enable-proxy \
         -c /home/rocketmq/rocketmq-5.3.0/conf/broker.conf
      
         # 验证 Broker 是否启动成功
         docker exec -it rmqbroker bash -c "tail -n 10 /home/rocketmq/logs/rocketmqlogs/proxy.log"
      
  3. Docker Compose 部署 RocketMQ

    • 编写 docker-compose
      为了快速启动并运行 RockerMQ 集群,您可以使用以下模板通过修改或添加环境部分中的配置来创建 docker-compose.yml 文件。
      version: '3.8'
      services:
      namesrv:
      image: apache/rocketmq:5.3.0
      container_name: rmqnamesrv
      ports: - 9876:9876
      networks: - rocketmq
      command: sh mqnamesrv
      broker:
      image: apache/rocketmq:5.3.0
      container_name: rmqbroker
      ports: - 10909:10909 - 10911:10911 - 10912:10912
      environment: - NAMESRV_ADDR=rmqnamesrv:9876
      depends_on: - namesrv
      networks: - rocketmq
      command: sh mqbroker
      proxy:
      image: apache/rocketmq:5.3.0
      container_name: rmqproxy
      networks: - rocketmq
      depends_on: - broker - namesrv
      ports: - 8080:8080 - 8081:8081
      restart: on-failure
      environment: - NAMESRV_ADDR=rmqnamesrv:9876
      command: sh mqproxy
      networks:
      rocketmq:
      driver: bridge
    
    • 启动 RocketMQ 集群
      linux
      docker-compose up -d
    

    window

    docker-compose -p rockermq_project up -d
    

三、RocketMQ 的特点

  • 高吞吐量:RocketMQ 通过队列和分布式架构支持大规模并发消息处理,适用于高吞吐量的场景。
  • 低延迟:支持毫秒级的消息投递延迟,适合对时效性要求高的应用。
  • 高可用性和持久性:通过多副本机制和日志文件存储,保证消息在异常情况下不丢失,并能够快速恢复。
  • 消息的顺序性:支持消息按发送顺序消费,确保某些场景下的消息顺序不被打乱。
  • 分布式事务支持:RocketMQ 提供的事务消息,可以保证分布式系统中的数据一致性。

四、RocketMQ 的场景

  • 异步处理:例如订单处理系统,在订单生成后异步发送订单消息到消息队列,进行后续处理,如库存更新、通知等。
  • 事件驱动架构:利用消息队列实现微服务之间的解耦,通过事件触发服务间的通信。
  • 日志收集:在分布式系统中,消息队列可以用于日志的收集和聚合,方便后续分析和处理。
  • 流量削峰填谷:在高并发场景中,消息队列可以用来削峰填谷,将请求平滑地分发到后端处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值