目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

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

 1mkdir -p /usr/local/software
 2cp jdk-8u201-linux-x64.tar.gz /usr/local/software/
 3cd /usr/local/software/
 4tar -zxvf jdk-8u201-linux-x64.tar.gz
 5mv jdk1.8.0_201 jdk8
 6vim /etc/profile
 7	export JAVA_HOME=/usr/local/software/jdk8
 8	export PATH=$JAVA_HOME/bin:$PATH
 9	export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
10	export JAVA_HOME PATH CLASSPATH
11cd /usr/local/software/
12source /etc/profile

部署 Maven

1cd /usr/local/software
2tar -zxvf apache-maven-3.6.0-bin.tar.gz
3mv apache-maven-3.6.0 maven
4vim /etc/profile
5	export PATH=/usr/local/software/maven/bin:$PATH
6source /etc/profile

配置阿里云镜像

1<mirror> 
2    <id>aliyun-maven</id> 
3    <mirrorOf>*</mirrorOf> 
4    <name>aliyun maven</name> 
5    <url>http://maven.aliyun.com/nexus/content/groups/public</url> 
6</mirror>

源码部署 RocketMQ4.X

 1# 安装unzip工具
 2yum install unzip
 3
 4# 解压
 5unzip rocketmq-all-4.4.0-source-release.zip 
 6mv rocketmq-all-4.4.0 rocketmq
 7
 8# 构建
 9cd rocketmq
10mvn -Prelease-all -DskipTests clean install -U
11
12
13# 解决NameServer内存不满足4G的报错:
14cd distribution/target/apache-rocketmq
15vim /test/rocketmq/distribution/target/apache-rocketmq/bin/runserver.sh   #修改JAVA_OPT
16JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
17
18
19# 启动NameServer 端口为9876
20nohup sh /test/rocketmq/distribution/target/apache-rocketmq/bin/mqnamesrv &     
21tail -f nohup.out  (The Name Server boot success. serializeType=JSON 表示启动成功)
22[root@localhost apache-rocketmq]# ss -tunlp | grep 9876
23
24# 解决Broker内存不满足4G的报错:
25vim /test/rocketmq/distribution/target/apache-rocketmq/bin/runbroker.s
26h
27JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"
28
29# 启动Broker (-n指定nameserver地址,nameserver服务端口为9876, broker默认端口 10911)
30nohup sh /test/rocketmq/distribution/target/apache-rocketmq/bin/mqbroker -n 192.168.31.220:9876 &
31tail -f nohup.out 
32
33# 查看进程
34jps	
35118315 BrokerStartup
36119162 Jps
37117468 NamesrvStartup
38
39# 验证
40cd /test/rocketmq/distribution/target/apache-rocketmq/
41export NAMESRV_ADDR=192.168.31.220:9876
42# 生产消息
43sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
44# 消费消息
45sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

部署 RocketMQ4.X 控制台

 1# 解压
 2unzip rocketmq-externals-master.zip 
 3cd rocketmq-externals-master
 4
 5# 修改pom文件
 6vim /test/rocketmq-externals-master/rocketmq-console/pom.xml 
 7<rocketmq.version>4.4.0</rocketmq.version> #去掉 -SNAPSHOT
 8
 9# 修改application.properties 配置文件
10vim /test/rocketmq-externals-master/rocketmq-console/src/main/resources/application.properties 
11rocketmq.config.namesrvAddr=192.168.31.220:9876 #阿里云需要开防火墙
12server.port=8081
13
14# 构建
15cd /test/rocketmq-externals-master/rocketmq-console
16mvn clean package -Dmaven.test.skip=true	
17cd target/
18
19# 以守护进程的方式启动RocketMQ-Console
20nohup java -jar /test/rocketmq-externals-master/rocketmq-console/target/rocketmq-console-ng-1.0.0.jar &
21
22#访问web
23http://192.168.31.220:8090

作者:Soulboy