RocketMQ入门与部署
RocketMQ4.x 特性
- 支持 Broker(减少带宽的传输)和 Consumer 端消息过滤
- 支持发布订阅模型,和点对点,
- 支持拉 pull 和推 push 两种消息模式
- 单一队列百万消息、亿级消息堆积
- 支持单 master 节点,多 master 节点,多 master 多 slave 节点
- 任意一点都是高可用,水平拓展,Producer、Consumer、队列都可以分布式
- 消息失败重试机制、支持特定 level 的定时消息
- 新版本底层采用 Netty
- 4.3.x 支持分布式事务
- 适合金融类业务,高可用性跟踪和审计功能。
角色
- Producer:消息生产者
- Producer Group:消息生产者组,发送同类消息的一个消息生产组
- Consumer:消费者
- Consumer Group:消费同类消息的多个实例
- Tag:标签,子主题(二级分类)对 topic 的进一步细化,用于区分同一个主题下的不同业务的消息
- Topic:主题, 如订单类消息,queue 是消息的物理管理单位,而 topic 是逻辑管理单位。一个 topic 下可以有多个 queue。(默认自动创建是 4 个,手动创建是 8 个)
- Message:消息,每个 message 必须指定一个 topic
- Broker:MQ 程序,接收生产的消息,提供给消费者消费的程序
- Name Server:给生产和消费者提供路由信息,提供轻量级的服务发现、路由、元数据信息,可以多个部署,互相独立(比 zookeeper 更轻量)
- Offset: 偏移量,可以理解为消息进度
- commit log: 消息存储会写在 Commit log 文件里面
部署 JDK1.8
mkdir -p /usr/local/software
cp jdk-8u201-linux-x64.tar.gz /usr/local/software/
cd /usr/local/software/
tar -zxvf jdk-8u201-linux-x64.tar.gz
mv jdk1.8.0_201 jdk8
vim /etc/profile
export JAVA_HOME=/usr/local/software/jdk8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH
cd /usr/local/software/
source /etc/profile
部署 Maven
cd /usr/local/software
tar -zxvf apache-maven-3.6.0-bin.tar.gz
mv apache-maven-3.6.0 maven
vim /etc/profile
export PATH=/usr/local/software/maven/bin:$PATH
source /etc/profile
配置阿里云镜像
<mirror>
<id>aliyun-maven</id>
<mirrorOf>*</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
源码部署 RocketMQ4.X
# 安装unzip工具
yum install unzip
# 解压
unzip rocketmq-all-4.4.0-source-release.zip
mv rocketmq-all-4.4.0 rocketmq
# 构建
cd rocketmq
mvn -Prelease-all -DskipTests clean install -U
# 解决NameServer内存不满足4G的报错:
cd distribution/target/apache-rocketmq
vim /test/rocketmq/distribution/target/apache-rocketmq/bin/runserver.sh #修改JAVA_OPT
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# 启动NameServer 端口为9876
nohup sh /test/rocketmq/distribution/target/apache-rocketmq/bin/mqnamesrv &
tail -f nohup.out (The Name Server boot success. serializeType=JSON 表示启动成功)
[root@localhost apache-rocketmq]# ss -tunlp | grep 9876
# 解决Broker内存不满足4G的报错:
vim /test/rocketmq/distribution/target/apache-rocketmq/bin/runbroker.s
h
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"
# 启动Broker (-n指定nameserver地址,nameserver服务端口为9876, broker默认端口 10911)
nohup sh /test/rocketmq/distribution/target/apache-rocketmq/bin/mqbroker -n 192.168.31.220:9876 &
tail -f nohup.out
# 查看进程
jps
118315 BrokerStartup
119162 Jps
117468 NamesrvStartup
# 验证
cd /test/rocketmq/distribution/target/apache-rocketmq/
export NAMESRV_ADDR=192.168.31.220:9876
# 生产消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
# 消费消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
部署 RocketMQ4.X 控制台
# 解压
unzip rocketmq-externals-master.zip
cd rocketmq-externals-master
# 修改pom文件
vim /test/rocketmq-externals-master/rocketmq-console/pom.xml
<rocketmq.version>4.4.0</rocketmq.version> #去掉 -SNAPSHOT
# 修改application.properties 配置文件
vim /test/rocketmq-externals-master/rocketmq-console/src/main/resources/application.properties
rocketmq.config.namesrvAddr=192.168.31.220:9876 #阿里云需要开防火墙
server.port=8081
# 构建
cd /test/rocketmq-externals-master/rocketmq-console
mvn clean package -Dmaven.test.skip=true
cd target/
# 以守护进程的方式启动RocketMQ-Console
nohup java -jar /test/rocketmq-externals-master/rocketmq-console/target/rocketmq-console-ng-1.0.0.jar &
#访问web
http://192.168.31.220:8090