IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【Java从0到架构师】RocketMQ 基础 - 应用、核心组件、安装 -> 正文阅读

[Java知识库]【Java从0到架构师】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
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-22 10:49:50  更:2021-10-22 10:51:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:36:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码