欢迎关注公众号:【11来了】 发送 “资料” 可以下载Redis、JVM系列文章PDF版本!
作者为在读研究生,目前研二,计划在公众号记录学习常用中间件笔记,以及明年更新面试经历!
MQ 之间的对比
三种常用的 MQ 对比,ActiveMQ、Kafka、RocketMQ
性能方面:
- 三种 MQ 吞吐量级别为:万,百万,十万
- 消息发送时延:毫秒,毫秒,微秒
- 可用性:主从,分布式,分服务器托管网布式
扩展性方面:
- 水平伸缩能力:均支持
- 技术栈:Java,Java/Scala,Java
功能维度方面:
- 消息重试能力:均支持
- 消息堆积能力:跟吞吐量成正相关,三种 MQ 分别为:弱,强,强
- 消息过滤:支持,不支持,支持
- 延迟消息:均支持
- 消息回溯(用于消费者宕机恢复后,回溯到宕机前消费的位置):不支持,支持,支持
RocketMQ 领域模型
- Topic:主题,可以理解为类别、分类的概念
- MessageQueue:消息队列,存储数据的一个容器(队列索引数据),默认每个 Topic 下有 4 个队列被分配出来存储消息
- Message:消息,真正携带信息的载体概念
- Producer:生产者,负责发送消息
- Consumer:消费者,负责消费消息
- ConsumerGroup:众多消费者构成的整体或构成的集群,称之为消费者组
- Subscription:订阅关系,消费者得知道自己需要消费哪个 Topic 下的哪个队列的数据
- Message Queue:一个 Topic 下可以设置多个消息队列,发送消息的时候,RocketMQ 会轮询该 Topic 下的所有队列将消息发送出去(下图中 Broker 中 Topic 指向的 Q1、Q2、Q3、Q4 就是 MessageQueue)
- Tag:对 Topic 的进一步细化
- Broker:Broker 是 Rocket MQ 的主要角色,主要管理消息的存储、发送、查询等功能
- Name Server:提供轻量级的服务发现,用于存储 Topic 和 Broker 关系信息
主要功能:
- 接收 Broker 的注册,并提供心跳机制去检查 Broker 是否存活
- 路由管理,每个 nameserver 都有整个 Broker 集群的路由信息和客户端的查询队列
Rocket MQ 单机服务启动
RocketMQ 官方下载地址:https://rocketmq.apache.org/zh/download/
单机服务启动,选择二进制文件进行下载:
将二进制文件上传至服务器,进行解压:
# 安装 unzip 命令
yum install unzip
# 解压
unzip rocketmq-all-5.1.4-bin-release.zip
修改 RocketMQ 的 JVM 配置
原本分配的 JVM 堆内存太大,如果启动时分配的内存不足就会报错,需要修改 bin
目录下的:runbroker.sh
和 runserver.sh
文件:
runbroker.sh
文件修改后的内容如下图:
runserver.sh
文件修改后的内容如下图:
配置 broker.conf 文件
在 conf/broker.conf
文件中追加如下内容:
brokerIP1=【填服务器的公网 ip 地址】
namesrvAddr=localhost:9876
linux 安装 jdk 环境
rocketmq 是 java 写的,因此还需要安装 jdk 环境,并且有 JAVA_HOME
环境变量
安装 jdk 流程如下:
# 创建目录
mkdir /usr/lib/jvm
# 解压到 /usr/lib/jvm 目录下
tar -xvf jdk-8u144-linux-x64.tar.gz -C /usr/lib/jvm
# 配置环境变量,Linux 环境变量在 /etc/profile 中配置
vi /etc/profile
# 在结尾添加如下内容
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_144
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 激活修改的配置
source /etc/profile
# 检查安装的 jdk
java -version
开放防火墙端口
# 开放防火墙 9876 和 10911 端口
firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --zone=public --add-port=10911/tcp --permanent
# 更新防火墙规则
firewall-cmd --reload
# 查看防火墙所有开放的端口
firewall-cmd --list-port
启动
# 1.启动 nameserver, nohup 和 & 可以让程序在后台运行
nohup sh bin/mqnamesrv &
# 查看日志,判断是否启动成功
tail ‐f ~/logs/rocketmqlogs/namesrv.log
# 2.启动 broker,-n 是 nameserver 的地址
nohup sh bin/mqbroker -c conf/broker.conf ‐n localhost:9876 &
# 下边这条命令在可以指定配置文件启动
# nohup sh bin/mqbroker -c conf/custom.conf ‐n localhost:9876 & autoCreateTopicEnable=true
# 查看日志服务器托管网,判断是否启动成功
tail ‐f ~/logs/rocketmqlogs/broker.log
启动后,使用 jps 查看是否启动成功:
关闭命令
sh bin/mqshutdown broker
sh bin/mqshutdown namesrv
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
背景 某天早上,正在一个会议时,突然好几个同事被叫出去了;后面才知道,是有业务同事反馈到领导那里,我们app里面某个功能异常。 具体是这样,我们安卓版本的app是禁止截屏的(应该是app里做了拦截),但部分页面,支持配置成可以截屏。这个配置是通过后端接口获取的…