RocketMQ研究及快速入门

RocketMQ介绍

MQ的应用场景

MQ全称为Message Queue,即消息队列, 开发中消息队列通常有如下应用场景:

1、任务异步处理

将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。

传统方式:
在这里插入图片描述
改造后方式:

交互流程如下:

  • 订单服务发消息到消息队列。
  • 消息队列将消息发给仓储服务和物流服务。
  • 仓储服务和物流服务接收到消息进行业务处理。

在这里插入图片描述

2、应用程序解耦合

MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。

举例:上图中,消息队列将订单服务和仓储服务进行解耦合,将订单服务和物流服务进行解耦合。

3、日志收集

进行统一业务日志收集,供分析系统进行数据分析,消息队列作为日志数据的中转站。

交互流程如下:

  • 采集系统从log日志文件采集数据,发送至消息队列 。
  • 各日志需求服务从消息队列 接收消息进行日志处理。

在这里插入图片描述

RocketMQ介绍

RocketMQ是阿里开源的一款非常优秀中间件产品,脱胎于阿里的另一款队列技术MetaQ,后捐赠给Apache基金会作为一款孵化技术,仅仅经历了一年多的时间就成为Apache基金会的顶级项目。并且它现在已经在阿里内部被广泛的应用,并且经受住了多次双十一的这种极致场景的压力。(2017年的双十一,RocketMQ流转的消息量达到了万亿级,峰值TPS达到5600万)。并且其内部通过Java语言开发,便于阅读与修改。

官网:http://rocketmq.apache.org/
在这里插入图片描述

消息队列技术选型对比

市场上还有哪些消息队列?

  • ActiveMQ
  • RabbitMQ
  • ZeroMQ
  • Kafka
  • MetaMQ
  • Redis

本项目选用RocketMQ的一个主要原因如下 :

  1. 支持事务消息
  2. 支持延迟消息
  3. 天然支持集群、负载均衡
  4. 支持指定次数和时间间隔的失败消息重发

详细的技术选型对比如下:

RabbitMQ
优点
  1. 支持AMQP协议
  2. 基于erlang语言开发,高并发性能较好
  3. 工作模式较为灵活
  4. 支持延迟消息
  5. 提供较为友好的后台管理页面
  6. 单机部署,1~2WTPS
缺点
  1. 不支持水平扩容
  2. 不支持事务
  3. 消息吞吐量三者最差
  4. 当产生消息堆积,性能下降明显
  5. 消息重发机制需要手动设置
  6. 不支持消息重复消费
RocketMQ
优点
  1. 高可用,高吞吐量,海量消息堆积,低延迟性能上,都表现出色
  2. api与架构设计更加贴切业务场景
  3. 支持顺序消息
  4. 支持事务消息
  5. 支持消息过滤
  6. 支持重复消费
  7. 支持延迟消息
  8. 支持消息跟踪
  9. 天然支持集群、负载均衡
  10. .支持指定次数和时间间隔的失败消息重发
  11. 单机部署,5~10WTPS
缺点
  1. 生态圈相较Kafka有所不如
  2. 消息吞吐量与消息堆积能力也不如Kafka
  3. 不支持主从自动切换
  4. 只支持Java
Kafka
优点
  1. 高可用,高吞吐量,低延迟性能上,都表现出色
  2. 使用人数多,技术生态圈完善
  3. 支持顺序消息
  4. 支持多种客户端
  5. 支持重复消费
缺点
  1. 依赖分区,消费者数量受限于分区数
  2. 单机消息过多时,性能下降明显
  3. 不支持事务消息
  4. 不支持指定次数和时间间隔的失败消息重发

RocketMQ基础

组成结构

RocketMQ组成结构图如下:
在这里插入图片描述
交互过程如下:

  1. Brokder定时发送自身状态 到NameServer。
  2. Producer 请求NameServer获取Broker的地址。
  3. Producer 将消息发送到Broker中的消息队列。
  4. Consumer订阅Broker中的消息队列,通过拉取消息,或由Broker将消息推送至Consumer。
  • Producer Cluster 消息生产者群
    • 负责发送消息,一般由业务系统负责产生消息。
  • Consumer Cluster 消息费群
    • 负责消费消息,一般是后台系统负责异步消费。
    • 两种消费模式:
      • Push Consumer,服务端向消费者端推送消息
      • Pull Consumer,消费者端向服务定时拉取消息
  • NameServer 名称服务器
    • 集群架构中的组织协调员,相当于注册中心,收集broker的工作情况,不负责消息的处理
  • Broker 消息服务器
    • 是RocketMQ的核心,负责消息的接受,存储,发送等
    • 需要定时发送自身状态 到NameServer,默认10秒发送一次,超时2分钟会认为该broker失效。
安装RocketMQ
环境要求
  1. 64位JDK 1.8+;
  2. Maven 3.2.x;
  3. 64位操作系统系统,本文档在Windows上安装。
下载

下载地址:http://archive.apache.org/dist/rocketmq/4.5.0/rocketmq-all-4.5.0-bin-release.zip

版本使用:4.5.0

下载后解压到一个没有空格和中文的目录。
在这里插入图片描述

启动
windows配置环境变量

变量名:ROCKETMQ_HOME

变量值:MQ解压路径

ROCKETMQ_HOME=D:\devtools\rocketmq-all-4.3.0-bin-release

1、配置

开发环境不需要太多的内存,这里调小一点.

Broker默认磁盘空间利用率达到85%就不再接收,这里在开发环境可以提高磁盘空间利用率报警阀值为98%。

cd bin/

vim runserver.cmd

set "JAVA_OPT=%JAVA_OPT% -server -Xms512m -Xmx512 -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

在这里插入图片描述

cd bin/

vim runbroker.cmd

set "JAVA_OPT=%JAVA_OPT% -server -Drocketmq.broker.diskSpaceWarningLevelRatio=0.98 -Xms512m -Xmx512m -Xmn256m"

在这里插入图片描述

2、启动NameServer

进入cmd命令窗口,执行bin/mqnamesrv.cmd

F:

cd F:\devenv\rocketmq-all-4.5.0-bin-release\bin

mqnamesrv.cmd

在这里插入图片描述

3、启动broker

进入cmd命令窗口,执行bin/mqbroker.cmd -n 127.0.0.1:9876

F:

cd F:\devenv\rocketmq‐all‐4.5.0‐bin‐release\bin

mqbroker.cmd -n 127.0.0.1:9876

-n:指定NameServer的地址
在这里插入图片描述
注意:

rocketMq4.2.0启动broker报错找不到或无法加载主类 Files\Java\jdk1.8.0_101\lib\dt.jar;C:\Program]

假如弹出提示框提示‘错误: 找不到或无法加载主类 xxxxxx’。打开runbroker.cmd,然后将‘%CLASSPATH%’加上英文双引号。保存并重新执行start语句。做如下图处理:
在这里插入图片描述

测试

1、发送消息

进入cmd命令窗口,执行:

set NAMESRV_ADDR=127.0.0.1:9876
cd F:\devenv\rocketmq‐all-4.5.0-bin-release\bin
tools.cmd org.apache.rocketmq.example.quickstart.Producer

在这里插入图片描述
在这里插入图片描述
2、接送消息

进入cmd命令窗口,执行:

set NAMESRV_ADDR=127.0.0.1:9876
tools.cmd org.apache.rocketmq.example.quickstart.Consumer

在这里插入图片描述

安装管理端

RocketMQ提供了UI管理工具,名为rocketmq-console

项目地址:https://github.com/apache/rocketmqexternals/tree/master/rocketmq-console

1)下载源代码

见资料文件夹rocketmq-console.zip

解压rocketmq-console.zip

2)修改配置

修改rocketmq-console\src\main\resources\application.properties

  • server.port=9877 // 服务端口号
  • rocketmq.config.namesrvAddr=127.0.0.1:9876 // 名称服务地址
  • rocketmq.config.dataPath=/tmp/rocketmq-console/data // mq数据路径

在这里插入图片描述
3)打包

进入rocketmq-console目录下

cmd下执行:

mvn clean package -Dmaven.test.skip=true

在这里插入图片描述

4)启动 进入/rocketmq-console/target

java -jar rocketmq-console-ng-1.0.1.jar --server.port=9877 --rocketmq.config.namesrvAddr=127.0.0.1:9876

5)访问 http://127.0.0.1:9877
在这里插入图片描述

快速入门
三种消息发送方式

RocketMQ 支持 3 种消息发送方式:

1、同步消息(sync message )

producer向 broker 发送消息,执行 API 时同步等待, 直到broker 服务器返回发送结果 。

2、异步消息(async message)

producer向 broker 发送消息时指定消息发送成功及发送异常的回调方法,调用 API 后立即返回,producer发送消息线程不阻塞 ,消息发送成功或失败的回调任务在一个新的线程中执行 。

3、单向消息(oneway message)

producer向 broker 发送消息,执行 API 时直接返回,不等待broker 服务器的结果 。

消息结构

RocketMQ的消息包括基础属性和扩展属性两部分:

1、基础属性

1)topic : 主题相当于消息的一级分类,具有相同topic的消息将发送至该topic下的消息队列中,比方说一个电商系统可以分为商品消息、订单消息、物流消息等,就可以在broker中创建商品主题、订单主题等,所有商品的消息发送至该主题下的消息队列中。

2)消息体:即消息的内容 ,可以为字符串、对象等类型(可系列化)。消息的最大长度 是4M。

3) 消息 Flag:消息的一个标记,RocketMQ不处理,留给业务系统使用。

2、扩展属性

1)tag :相当于消息的二级分类,用于消费消息时进行过滤,可为空 。

2)keys: Message 索引键,在运维中可以根据这些 key 快速检索到消息, 可为空 。 3)waitStoreMsgOK :消息发送时是否等消息存储完成后再返回 。

Message 的基础属性主要包括消息所属主题 topic , 消息 Flag(RocketMQ 不做处理)、 扩展属性、消息体 。

生产者工程
创建生产者工程

工程结构如下:
在这里插入图片描述
1)创建test-rocketmq

创建一个test-rocketmq的测试工程专门用于rocketmq的功能测试。

test-rocketmq父工程的pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>shanjupay</artifactId>
        <groupId>com.shanjupay</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.shanjupay</groupId>
    <artifactId>test-rocketmq</artifactId>
    <packaging>pom</packaging>

    <dependencies>
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9.冄2.7.號

你的鼓励将是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值