当前位置: 首页 > news >正文

RocketMQ 实战:在 macOS 上安装与前端访问全流程指南

RocketMQ 是一款高性能的分布式消息队列中间件,在微服务架构中得到了广泛应用。本文将引导您在 macOS 上安装 RocketMQ,并使用 RocketMQ 控制台进行前端访问和管理。同时,我们将涵盖如何优雅地关闭相关服务,以确保系统的稳定性。

1. 准备工作

在开始之前,确保您的 macOS 系统已经具备以下组件:

  • Java 运行时环境 (JRE):RocketMQ 依赖于 Java 运行环境,您可以通过以下命令检查 Java 是否已安装:

    java -version
    

    如果未安装 Java,可以使用 Homebrew 进行安装:

    brew install openjdk@11
    
  • Homebrew:macOS 常用的包管理工具,可以用它来简化软件安装过程。若尚未安装 Homebrew,可以在终端中执行以下命令进行安装:

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    

2. 安装 RocketMQ

虽然 RocketMQ 尚未提供直接的 Homebrew 安装方式,但我们可以通过 Apache 官方网站手动下载和安装。

  1. 下载 RocketMQ:从 Apache 官方网站下载最新版本的 RocketMQ(本文以 4.9.4 版本为例)。

    wget https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip
    
  2. 解压文件

    unzip rocketmq-all-4.9.4-bin-release.zip
    
  3. 进入 RocketMQ 目录

    cd rocketmq-all-4.9.4-bin-release
    

3. 启动 Name Server 和 Broker

RocketMQ 需要先启动 Name Server(名称服务器)来管理和发现 Broker。接下来启动 Broker 来接收和处理消息。

  1. 启动 Name Server

    nohup sh bin/mqnamesrv &
    

    可以通过查看日志文件来确认 Name Server 是否成功启动:

    tail -f ~/logs/rocketmqlogs/namesrv.log
    
  2. 启动 Broker:在确保 Name Server 启动成功后,执行以下命令来启动 Broker:

    nohup sh bin/mqbroker -n localhost:9876 &
    

    使用以下命令查看 Broker 启动日志,以确认启动状态:

    tail -f ~/logs/rocketmqlogs/broker.log
    

4. 安装和启动 RocketMQ 控制台

为了更方便地管理和监控 RocketMQ,我们可以安装 RocketMQ 控制台,这是一款基于 Web 的管理工具。

  1. 下载 RocketMQ 控制台:从 GitHub 仓库克隆 RocketMQ 控制台的代码:

    git clone https://github.com/apache/rocketmq-dashboard.git
    
  2. 进入项目目录

    cd rocketmq-dashboard
    
  3. 构建项目:使用 Maven 进行项目构建。确保您的系统已安装 Maven(可通过 Homebrew 安装:brew install maven)。

    mvn clean package -DskipTests
    
  4. 启动控制台:使用以下命令启动 RocketMQ 控制台,将 Name Server 地址指定为 localhost:9876

    java -jar target/rocketmq-dashboard-1.0.1-SNAPSHOT.jar --rocketmq.config.namesrvAddr=localhost:9876
    

5. 访问 RocketMQ 控制台

RocketMQ 控制台默认运行在本地的 8080 端口。您可以在浏览器中输入以下地址访问控制台:

http://localhost:8080

进入控制台后,您可以进行以下操作:

  • 查看集群信息
  • 查看和管理 Broker 状态
  • 创建和管理 Topic(主题)
  • 查看消息的生产与消费情况

6. 测试消息发送和消费

  1. 创建 Topic:在 RocketMQ 控制台上,选择“Topic 管理”并创建一个新的 Topic。

  2. 发送消息:使用 RocketMQ 提供的工具类向 Topic 发送测试消息。进入 RocketMQ 安装目录,执行以下命令:

    export NAMESRV_ADDR=localhost:9876
    sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
    
  3. 消费消息:使用以下命令消费测试消息:

    export NAMESRV_ADDR=localhost:9876
    sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
    

通过这些步骤,您可以验证 RocketMQ 集群的消息发送与消费功能是否正常工作。

7. 优雅地关闭 RocketMQ Name Server 和 Broker

在关闭 RocketMQ 服务时,应首先关闭 Broker,然后再关闭 Name Server。这是因为 Broker 依赖于 Name Server 的存在,反过来则不然。以下是具体操作步骤和代码:

1. 关闭 Broker
  1. 找到 Broker 进程 ID (PID):

    使用以下命令查找 mqbroker 进程的 PID:

    ps -ef | grep mqbroker
    
  2. 关闭 Broker 进程:

    通过 PID 发送 TERM 信号来优雅地关闭 Broker:

    kill -TERM <PID>
    

    替换 <PID> 为实际的进程 ID。使用 TERM 信号可以让进程有机会清理资源并完成当前正在处理的任务,从而优雅地关闭。

    或者直接运行 RocketMQ 提供的关闭脚本:

    sh bin/mqshutdown broker
    
2. 关闭 Name Server
  1. 找到 Name Server 进程 ID (PID):

    使用以下命令查找 mqnamesrv 进程的 PID:

    ps -ef | grep mqnamesrv
    
  2. 关闭 Name Server 进程:

    使用 kill 命令发送 TERM 信号:

    kill -TERM <PID>
    

    替换 <PID> 为 Name Server 的进程 ID。

    或者使用 RocketMQ 提供的关闭脚本:

    sh bin/mqshutdown namesrv
    

8. 确认服务是否关闭

在执行关闭操作后,可以检查相关进程是否已经成功关闭:

ps -ef | grep mqbroker
ps -ef | grep mqnamesrv

如果没有输出,说明进程已经成功关闭。

9. 总结

通过本文的指导,您已经在 macOS 上成功安装并配置了 RocketMQ,并通过 RocketMQ 控制台实现了对 RocketMQ 集群的前端访问和管理。同时,我们还介绍了如何优雅地关闭 Name Server 和 Broker,确保系统的稳定性。

进一步的操作可以包括配置更多的 Broker 节点、优化消息消费策略、集成更多的消息处理逻辑等。祝您在使用 RocketMQ 的过程中取得更加卓越的表现!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vue后台项目打包成桌面应用程序(.exe)
  • Netty 知识目录
  • vue2.0中axios请求配置
  • 数据治理学习笔记(二):在数仓建模过程中,数据治理要怎么做
  • Pinia 使用(一分钟了解)
  • 刷题记录-HOT 100(二)
  • 【C++11及其特性】智能指针——unique_ptr
  • 用 BigQuery ML 和 Google Sheets 数据预测电商网站访客趋势
  • Linux驱动开发MODULE_DEVICE_TABLE的作用
  • 【Spring Boot-IDEA创建spring boot项目方法】
  • EXCEL文件如何批量加密,有什么方法
  • 零基础学习Redis(7) -- hash类型命令使用
  • TCP的流量控制深入理解
  • 92. UE5 GAS RPG 使用C++创建GE实现灼烧的负面效果
  • 【操作系统】同步互斥与Golang互斥锁实现
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • C学习-枚举(九)
  • ECS应用管理最佳实践
  • MySQL主从复制读写分离及奇怪的问题
  • Next.js之基础概念(二)
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 对象引论
  • 构建工具 - 收藏集 - 掘金
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 如何选择开源的机器学习框架?
  • 如何学习JavaEE,项目又该如何做?
  • 软件开发学习的5大技巧,你知道吗?
  • 一个项目push到多个远程Git仓库
  • 优化 Vue 项目编译文件大小
  • 转载:[译] 内容加速黑科技趣谈
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #14vue3生成表单并跳转到外部地址的方式
  • #前后端分离# 头条发布系统
  • (day6) 319. 灯泡开关
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (剑指Offer)面试题34:丑数
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (转)EXC_BREAKPOINT僵尸错误
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .net core docker部署教程和细节问题
  • .NET Core中的时区转换问题
  • .Net Memory Profiler的使用举例
  • .net/c# memcached 获取所有缓存键(keys)
  • .py文件应该怎样打开?
  • @javax.ws.rs Webservice注解
  • @ModelAttribute注解使用
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限