栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java从0到架构师】RocketMQ 基础 - 应用、核心组件、安装

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java从0到架构师】RocketMQ 基础 - 应用、核心组件、安装

RocketMQ 消息中间件
  • 基础知识
  • 消息中间件的应用
    • 异步解耦
    • 削峰填谷
    • 消息分发
  • RocketMQ 核心组件
  • RocketMQ 安装
    • 源码安装
    • 修改配置参数
    • 启动
  • 管理控制台安装
    • 测试项目

Java 从 0 到架构师目录:【Java从0到架构师】学习记录

基础知识

在分布式微服务架构中,不同服务之间的通信方式主要有两种:

  • 通过 RPC 框架,直接远程调用其他服务:Dubbo、Spring Cloud
  • 通过消息中间件完成消息的存储和转发:RocketMQ、Kafka、RabbitMQ

常见的消息中间件

  • ActiveMQ:Apache 比较老的一个开源的消息中间件,完全支持 JMS 规范、API 丰富,现在比较少用
  • RabbitMQ:实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件),RabbitMQ 服务器由 Erlang 语言编写的,其集群和故障转移是构建在开放电信平台框架上
  • KafKa:Apache 开发的开源流处理平台,由 Scale 和 Java 编写;Kafka 是一种高吞吐量的分布式发布订阅消息系统,可以处理消费者在网站中的所有动作流数据,在大数据领域和日志处理解决方案用的比较多
  • RocketMQ:阿里巴巴在 2012 年开源的分布式消息中间件,捐赠给 Apache 基金会,于 2017 年 9 月 25 日成为 Apache 的顶级项目。目前 RocketMQ 在阿里集团被广泛应用在订单、交易、充值、流计算、消息推送、日志流式处理、 binlog 分发等场景。

同步刷盘:当数据写如到内存中之后立刻刷盘(同步),在保证刷盘成功的前提下响应 client(不会丢失数据)
异步刷盘:数据写入内存后,直接响应 client,异步将内存中的数据持久化到磁盘上(会丢失数据)

这里经常遇到的“消息推送”,并不是指将消息推送给用户,而是指:将消息从消息中间件推送到消费者的过程


RocketMQ 的核心特性

  • 低延迟:1ms 内响应的延迟超过 99.6%

  • 高稳定性:阿里巴巴双十一官方指定消息产品,支撑阿里巴巴集团所有的消息服务,历经十余年高可用与高可靠的严苛考验,是阿里巴巴交易链路的核心产品

    服务可用性 99.95%,Region 化、多可用区、分布式集群化部署,确保服务高可用,即便整个机房不可用仍可正常提供消息服务
    数据可靠性 99.99999999%,同步双写、超三副本数据冗余与快速切换技术确保数据可靠

  • 高性能:历年双 11 购物狂欢节零点千万级 TPS、万亿级数据洪峰,创造了全球最大的业务消息并发以及流转纪录(日志类消息除外);在始终保证高性能前提下,支持亿级消息堆积,不影响集群的正常服务,在削峰填谷(蓄洪)、微服务解耦的场景下尤为重要

  • 丰富的消息类型:提供丰富的消息类型,满足各种严苛场景下的高级特性需求,当前支持的消息类型涵盖普通消息、顺序消息(全局顺序 / 分区顺序)、分布式事务消息、定时消息/延时消息

消息中间件的应用 异步解耦

同步方式调用服务:服务和服务之间耦合性比较高,一定要执行完某个服务再执行下一个

异步方式调用服务:系统的耦合性降低,就算某个服务挂掉,也不会影响其他主要业务;等挂掉的服务恢复正常,系统可以继续调用

削峰填谷

消息分发

RocketMQ 核心组件

运行模型:

  1. 启动服务器 NameServer
    NameServer 的作用类似于 ZK 这样的注册中心,主要用于存储元数据的管理,比如每个 Topic 的位置信息
  2. 启动服务器 Broker
    是数据处理服务器,不同的消息存储在不同的 Topic 中;同一个 Topic,为了提高消息处理的并发能力,会有多个 Queue 队列
  3. 启动生产者,连接 NameServer,获取对应的 Topic 信息,开始创建消息并发送
  4. 启动消费者,连接 NameServer,获取对应的 Topic 信息,开始消费消息
  • NameServer - 名称服务:充当路由消息的提供者。生产者或消费者能够通过名字服务查找各主题相应的 Broker IP 列表;多个 Namesrver 实例组成集群,但相互独立,没有信息交换。
  • Broker - 消息中转角色,负责存储消息、转发消息。代理服务器在 RocketMQ 系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。代理服务器也存储消息相关的元数据,包括消费者组、消费进度偏移和主题和队列消息等。
  • Topic - 表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是 RocketMQ 进行消息订阅的基本单位。
  • Queue :为了提高消息处理的并发度,我们的每个消息主题 Topic 会有多个 Queue
  • Producer:负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。同步和异步方式均需要Broker返回确认信息,单向发送不需要。
  • Comsumer:负责消费消息,一般是后台系统负责异步消费。一个消息消费者会从 Broker 服务器拉取消息、并将其提供给应用程序。从用户应用的角度而言提供了两种消费形式:拉取式消费、推动式消费。
  • Message:消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。RocketMQ 中每个消息拥有唯一的 Message ID,且可以携带具有业务标识的 Key。系统提供了通过 Message ID 和 Key 查询消息的功能。
RocketMQ 安装 源码安装

下载源码:

wget https://archive.apache.org/dist/rocketmq/4.7.0/rocketmq-all-4.7.0-source-release.zip

unzip rocketmq-all-4.7.0-source-release.zip -d /usr/local/src

安装 Maven:百度的教程

执行 Maven 构建:

mvn -Prelease-all -Dmaven.test.skip=true clean install -U
	-P 激活指定的环境
	-U 强制更新本地仓库的文件

当构建完成以后,移动目录:

mv distribution/target/rocketmq-4.7.0/ -R /usr/local/
修改配置参数

为了保证 RocketMQ 正常启动,默认情况会使用比较大的内存,建议给 NameServer 和 Broker 设置 1G 内存:

# 进入到 rocketmq-4.7/bin
# 修改 runbroker.sh 和 runserver.sh 脚本

# 修改以下内容
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:metaspaceSize=128m -XX:MaxmetaspaceSize=320m"
# 修改为
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512M -XX:metaspaceSize=128m -XX:MaxmetaspaceSize=320m"
启动

启动 NameServer:

nohup bin/mqnamesrv &

启动 Broker:

nohup bin/mqbroker -n 127.0.0.1:9876 & 

查看状态:

# 1 使用jdk命令
jps
# 2 使用操作系统命令
netstat -ntlp

关闭服务:

bin/mqshutdown broker

bin/mqshutdown nameserver

管理控制台安装

https://github.com/apache/rocketmq-externals

管理控制台项目:rocketmq-externals/rocketmq-console

  • 本身是一个 SpringBoot 项目
  • 打包以后可以直接通过 java -jar 运行,如果需要修改配置文件,可以创建一个 application.properites
# 安装 git
yum install -y git

# 下载源码, 在 /usr/local/src 目录
git clone https://gitee.com/heshengjun/rocketmq-externals.git

# 执行Maven构建
## 进入到管理控制台项目
cd rocketmq-externals/rocketmq-console
mvn package -Dmaven.test.skip=true

# 1 启动rocket服务, 在启动管理控制台之前, 必须先启动NameServer
# 2 在启动目录创建一个application.properties, 配置信息如下:
server.port=9999
rocketmq.config.namesrvAddr=127.0.0.1:9876
# 3 启动管理控制台
nohup java -jar rocketmq-console-ng-1.0.1.jar &
测试项目
# 设置一个NameServer的地址的环境变量
export NAMESRV_ADDR=127.0.0.1:9876

# 启动生产者
bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

# 启动消费者
bin/tools.sh  org.apache.rocketmq.example.quickstart.Consumer
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/345371.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号