目录

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

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

作者:Soulboy