赞
踩
消息中间件是我们平时在系统开发中比较常用的中间件之一,准备开一个RocketMQ的教程系列,大家有想要学习的可以关注一下!
Apache RocketMQ(Rocket Message Queue)是一个开源的、分布式的消息中间件系统。它最初是由阿里巴巴集团开发和开源的,后来成为了Apache软件基金会的顶级项目之一。RocketMQ旨在提供可靠、快速、可扩展的消息传递服务,适用于大规模分布式系统中的消息通信。
RocketMQ有很多优秀的特性,在可用性方面,RocketMQ强调集群无单点,任意一点高可用,客户端具备负载均衡能力,可以轻松实现水平扩容;在性能方面,在天猫双11大促背后的亿级消息处理就是通过RocketMQ提供的保障;在API方面,提供了丰富的功能,可以实现异步消息、同步消息、顺序消息、事务消息等丰富的功能,能满足大多数应用场景;在可靠性方面,提供了消息持久化、失败重试机制、消息查询追溯的功能,进一步为可靠性提供保障。
下面我们就进入学习,首先要先了解RocketMQ中的几个概念:
RocketMQ的基础模型,一个简单的Pub/Sub模型
上图就是一个基本的消息系统模型,包括生产者 (Producer),消费者 (Consumer),中间进行基于消息主题(Topic)的消息传送。
RocketMQ扩展后的消息模型
生产者组Producer Group:一个逻辑概念,在使用生产者实例的时候需要指定一个组名。一个生产者组可以生产多个Topic的消息。
生产者实例Producer:一个生产者组部署了多个进程,每个进程都可以称为一个生产者实例。
主题Topic:一个Topic代表消息的大类,比如“财政数据”Topic、“商城订单”Topic,一个Topic下可以拥有多个队列Queue
标签Tag:二级分类,对topic的进一步细化,用于区分同一个主题下的不同业务的消息,例如:“财政数据”的Tag可以有“计划”、“指标”、“支付”,“商城订单”的Tag可以有“线上订单”、“线下订单”...。
消息Message:具体的数据消息,每个message必须指定Topic
队列Queue:Queue就是消息队列的物理通信通道,消息采用FIFO(先进先出)模式传输,负责向消费者Push(推送)数据,或者由消费者直接Pull(拉取)
消费者组Consumer Group:一个逻辑概念,在使用消费者时需要指定一个组名。一个消费者组可以订阅多个Topic。
消费者实例Consumer:一个消费者组程序部署了多个进程,每个进程都可以称为一个消费者实例。
首先,我们要先了解一下部署模型
从官网的模型图中,我们可以看到部署架构上主要分为四部分:
命名服务器 NameServer
NameServer是一个简单的 Topic 路由注册中心,支持 Topic、Broker 的动态注册与发现。
主要包括两个功能:
NameServer通常会有多个实例部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,客户端仍然可以向其它NameServer获取路由信息。
代理服务器 Broker
Broker主要负责消息的存储、投递和查询以及服务高可用保证。
NameServer几乎无状态节点,因此可集群部署,节点之间无任何信息同步。Broker部署相对复杂。
在 Master-Slave 架构中,Broker 分为 Master 与 Slave。一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。Master 与 Slave 的对应关系通过指定相同的BrokerName,不同的BrokerId 来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。
生产者 Producer
发布消息的角色。Producer通过 MQ 的负载均衡模块选择相应的 Broker 集群队列进行消息投递,投递的过程支持快速失败和重试。
消费者 Consumer
消息消费的角色。
刚开始学习的话,先采取单Master方式,比较简单方便,教程采用的是windows系统
1.下载RocketMQ
讲解采用的是4.9.4版本的RocketMQ
2.配置环境变量
设置环境变量ROCKETMQ_HOME
3.启动命名服务器
打开bin目录,找到mqnamesrv.cmd,双击启动,看到以下信息说明启动成功
4.启动broker
首先,我们进入conf文件夹下面,可以看到broker.conf配置文件,打开进行bro设置
# 集群名称 同一个集群下的broker要相同 brokerClusterName = DefaultCluster # broker名称 brokerName = broker-a # 0代表主节点 大于0代表从节点 brokerId = 0 # 删除日志文件,默认4点 deleteWhen = 04 # 日志文件保留时间 默认48小时 fileReservedTime = 48 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master brokerRole = ASYNC_MASTER #刷盘方式 #- ASYNC_FLUSH 异步刷盘,性能好宕机会丢数 #- SYNC_FLUSH 同步刷盘,性能较差不会丢数 flushDiskType = ASYNC_FLUSH # NameServer节点列表,使用分号分割 namesrvAddr=127.0.0.1:9876 # 发送消息自动创建Topic,生产环境不推荐 autoCreateTopicEnable = true
大部分参数都是默认的,我们只需要在最后添加namesrvAddr参数,设置你的命名服务器IP和端口号,然后我们进入bin目录启动broker
在目录里打开cmd命令,可以在目录下搜索栏中敲击cmd回车打开
指定刚才我们更改的配置文件,回车,看到以下信息,说明broker启动成功
mqbroker -c D:\work\rocketmq-all-4.9.4-bin-release\conf\broker.conf
注意:
如果出现的信息是找不到或无法加载主类
则我们打开bin目录下的runbroker.cmd,把倒数第二行的CLASSPATH加上引号,不如获取不到路径
- set "JAVA_OPT=%JAVA_OPT% -cp %CLASSPATH%"
- 改成
- set "JAVA_OPT=%JAVA_OPT% -cp "%CLASSPATH%""
这时候我们可以通过mqadmin来查看集群状态
mqadmin clusterList -n 127.0.0.1:9876
可以看到已经有了刚才启动的broker了。
到此,RocketMQ已经启动完毕
RocketMQ Dashboard 是 RocketMQ 的管控利器,为用户提供客户端和应用程序的各种事件、性能的统计信息,支持以可视化工具代替 Topic 配置、Broker 管理等命令行操作。
源码地址:
https://github.com/apache/rocketmq-dashboard/releases/tag/rocketmq-dashboard-1.0.0
打成Jar包直接执行就可以了,也可以关注公众号程序员的小黑板(末尾有二维码),发送RocketMQ获取下载地址,或者点击下面连接
https://download.csdn.net/download/u014374743/88801190
java -jar rocketmq-dashboard-1.0.0.jar
默认8080端口,访问http://localhost:8080
点击集群,我们就可以看到集群状态
这次的分享就分享到这,主要介绍了RocketMQ的基础知识和部署方式。
接下来将分享Java如何使用RocketMQ
关注我,不迷路
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。