RocketMq第一章RocketMQ基本操作

1. RocketMQ简介

MQ====Message Queue
动力节点双哥最新RocketMQ视频教程

RocketMQ是阿里巴巴2016年MQ中间件,使用Java语言开发,RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物联网、车联网等。
具有以下特点:

  1. 能够保证严格的消息顺序
  2. 提供丰富的消息拉取模式
  3. 高效的订阅者水平扩展能力
  4. 实时的消息订阅机制
  5. 亿级消息堆积能力

2. 为什么要使用MQ

1,要做到系统解耦,当新的模块进来时,可以做到代码改动最小; 能够解耦
2,设置流程缓冲池,可以让后端系统按自身吞吐能力进行消费,不被冲垮; 能够削峰,限流
3,强弱依赖梳理能把非关键调用链路的操作异步化并提升整体系统的吞吐能力;能够异步


Mq的作用 削峰限流 异步 解耦合


2.1 定义

中间件(缓存中间件 redis memcache 数据库中间件 mycat canal 消息中间件mq )
面向消息的中间件(message-oriented middleware) MOM能够很好的解决以上的问题。
是指利用高效可靠的消息传递机制进行与平台无关(跨平台)的数据交流,并基于数据通信来进行分布式系统的集成。
通过提供消息传递和消息排队模型在分布式环境下提供应用解耦,弹性伸缩,冗余存储,流量削峰,异步通信,数据同步等

大致流程
发送者把消息发给消息服务器[MQ],消息服务器把消息存放在若干队列/主题中,在合适的时候,消息服务器会把消息转发给接受者。在这个过程中,发送和接受是异步的,也就是发送无需等待,发送者和接受者的生命周期也没有必然关系在发布pub/订阅sub模式下,也可以完成一对多的通信,可以让一个消息有多个接受者[微信订阅号就是这样的]

2.2 特点

2.2.1 异步处理模式

消息发送者可以发送一个消息而无需等待响应。消息发送者把消息发送到一条虚拟的通道(主题或队列)上;
消息接收者则订阅或监听该通道。一条信息可能最终转发给一个或多个消息接收者,这些接收者都无需对消息发送者做出回应。整个过程都是异步的。
案例:
也就是说,一个系统和另一个系统间进行通信的时候,假如系统A希望发送一个消息给系统B,让它去处理,但是系统A不关注系统B到底怎么处理或者有没有处理好,所以系统A把消息发送给MQ,然后就不管这条消息的“死活” 了,接着系统B从MQ里面消费出来处理即可。至于怎么处理,是否处理完毕,什么时候处理,都是系统B的事,与系统A无关。

这样的一种通信方式,就是所谓的“异步”通信方式,对于系统A来说,只要把消息发给MQ,然后系统B就会异步处去进行处理了,系统A不能“同步”的等待系统B处理完。这样的好处是什么呢?解耦

2.2.2 应用系统的解耦

发送者和接收者不必了解对方,只需要确认消息
发送者和接收者不必同时在线

2.2.3 现实中的业务

3. 各个MQ产品的比较

4. RocketMQ重要概念【重点】

Producer:消息的发送者,生产者;举例:发件人
Consumer:消息接收者,消费者;举例:收件人
Broker:暂存和传输消息的通道;举例:快递
NameServer:管理Broker;举例:各个快递公司的管理机构 相当于broker的注册中心,保留了broker的信息
Queue:队列,消息存放的位置,一个Broker中可以有多个队列
Topic:主题,消息的分类
ProducerGroup:生产者组
ConsumerGroup:消费者组,多个消费者组可以同时消费一个主题的消息
消息发送的流程是,Producer询问NameServer,NameServer分配一个broker 然后Consumer也要询问NameServer,得到一个具体的broker,然后消费消息

5. 生产和消费理解【重点】

6. RocketMQ安装

了解了mq的基本概念和角色以后,我们开始安装rocketmq,建议在linux上

6.1 下载RocketMQ

下载地址:https://rocketmq.apache.org/dowloading/releases/
注意选择版本,这里我们选择4.9.2的版本,后面使用alibaba时对应

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

6.2 上传服务器

在root目录下创建文件夹

mkdir rocketmq

将下载后的压缩包上传到阿里云服务器或者虚拟机中去

6.3 解压

unzip rocketmq-all-4.9.2-bin-release.zip

如果你的服务器没有unzip命令,则下载安装一个

yum install unzip

目录分析

Benchmark:包含一些性能测试的脚本;
Bin:可执行文件目录;
Conf:配置文件目录;
Lib:第三方依赖;
LICENSE:授权信息;
NOTICE:版本公告;

6.4 配置环境变量

vim /etc/profile

在文件末尾添加

export NAMESRV_ADDR=阿里云公网IP:9876

6.5 修改nameServer的运行脚本

进入bin目录下,修改runserver.sh文件,将71行和76行的Xms和Xmx等改小一点

vim runserver.sh


保存退出

6.6 修改broker的运行脚本

进入bin目录下,修改runbroker.sh文件,修改67行

保存退出

6.7 修改broker的配置文件

进入conf目录下,修改broker.conf文件

| brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr=localhost:9876
autoCreateTopicEnable=true

brokerIP1=阿里云公网IP

添加参数解释
namesrvAddr:nameSrv地址 可以写localhost因为nameSrv和broker在一个服务器
autoCreateTopicEnable:自动创建主题,不然需要手动创建出来
brokerIP1:broker也需要一个公网ip,如果不指定,那么是阿里云的内网地址,我们再本地无法连接使用

6.8 启动

首先在安装目录下创建一个logs文件夹,用于存放日志
mkdir logs

一次运行两条命令
启动nameSrv

nohup sh bin/mqnamesrv > ./logs/namesrv.log &

启动broker 这里的-c是指定使用的配置文件

nohup sh bin/mqbroker -c conf/broker.conf > ./logs/broker.log &

查看启动结果

6.9 RocketMQ控制台的安装RocketMQ-Console

Rocketmq 控制台可以可视化MQ的消息发送!
旧版本源码是在rocketmq-external里的rocketmq-console,新版本已经单独拆分成dashboard
网址: https://github.com/apache/rocketmq-dashboard
下载地址:
https://github.com/apache/rocketmq-dashboard/archive/refs/tags/rocketmq-dashboard-1.0.0.zip
下载后解压出来,在跟目录下执行

mvn clean package -Dmaven.test.skip=true


将jar包上传到服务器上去

然后运行

nohup java -jar ./rocketmq-dashboard-1.0.0.jar rocketmq.config.namesrvAddr=127.0.0.1:9876 > ./rocketmq-4.9.3/logs/dashboard.log &

命令拓展:–server.port指定运行的端口
–rocketmq.config.namesrvAddr=127.0.0.1:9876 指定namesrv地址
访问: http://localhost:8001
运行访问端口是8001,如果从官网拉下来打包的话,默认端口是8080

7. RocketMQ安装之docker

7.1 下载RockerMQ需要的镜像

| docker pull rocketmqinc/rocketmq

docker pull styletang/rocketmq-console-ng

7.2 启动NameServer服务

7.2.1 创建NameServer数据存储路径

mkdir -p /home/rocketmq/data/namesrv/logs /home/rocketmq/data/namesrv/store

7.2.2 启动NameServer容器

docker run -d --name rmqnamesrv -p 9876:9876 -v /home/rocketmq/data/namesrv/logs:/root/logs -v /home/rocketmq/data/namesrv/store:/root/store -e “MAX_POSSIBLE_HEAP=100000000” rocketmqinc/rocketmq sh mqnamesrv

7.3 启动Broker服务

7.3.1 创建Broker数据存储路径

mkdir -p /home/rocketmq/data/broker/logs /home/rocketmq/data/broker/store

7.3.2 创建conf配置文件目录

mkdir /home/rocketmq/conf

7.3.3 在配置文件目录下创建broker.conf配置文件

# 所属集群名称,如果节点较多可以配置多个_brokerClusterName = DefaultCluster#broker名称,master和slave使用相同的名称,表明他们的主从关系_brokerName = broker-a_#0表示Master,大于0表示不同的slave_brokerId = 0_#表示几点做消息删除动作,默认是凌晨4点_deleteWhen = 04_#在磁盘上保留消息的时长,单位是小时_fileReservedTime = 48_#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;brokerRole = ASYNC_MASTER#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;flushDiskType = ASYNC_FLUSH# 设置broker节点所在服务器的ip地址_brokerIP1 = 你服务器外网ip

7.3.4 启动Broker容器

docker run -d --name rmqbroker --link rmqnamesrv:namesrv -p 10911:10911 -p 10909:10909 -v /home/rocketmq/data/broker/logs:/root/logs -v /home/rocketmq/data/broker/store:/root/store -v /home/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf --privileged=true -e “NAMESRV_ADDR=namesrv:9876” -e “MAX_POSSIBLE_HEAP=200000000” rocketmqinc/rocketmq sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf

7.4 启动控制台

| docker run -d --name rmqadmin -e "JAVA_OPTS=-Drocketmq.namesrv.addr=你的外网地址:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false \

-Duser.timezone=‘Asia/Shanghai’" -v /etc/localtime:/etc/localtime -p 9999:8080 styletang/rocketmq-console-ng

7.5 正常启动后的docker ps

7.6 访问控制台

http://你的服务器外网ip:9999/

猜你喜欢

转载自blog.csdn.net/Javanewspaper/article/details/130603324