RocketMQ
消息队列作为高并发系统的组件之一,能够帮助业务系统解构提高开发效率和系统稳定性。
优势:
- 削峰填谷:解决瞬时写压力导致的消息丢失、系统崩溃等问题
- 系统解耦:处理不同重要程度和不同能力级别系统之间的消息
- 提升性能:当存在一对多调用是,可以发一条消息给消息系统,让消息系统通知相关系统
- 蓄流压测:可以堆积一定的消息量来压测
安装RocketMQ
# ls build-image.sh Dockerfile-alpine Dockerfile-centos scripts update.sh
创建RocketMQ镜像
sh build-image.sh RMQ-VERSION BASE-IMAGE
BASE-IMAGE支持centos,alpine两种方式
我们使用
sh build-image.sh 4.7.1 alpine
构建时间有点长,需要耐心等待。
当构建完成之后会提示
Successfully built 128108c2e50d Successfully tagged apacherocketmq/rocketmq:4.7.1-alpine
那么我们就能查询到镜像
# docker images |grep mq apacherocketmq/rocketmq 4.7.1-alpine 128108c2e50d 4 9 seconds ago 145MB
生成配置
# ls CONTRIBUTING.md image-build LICENSE NOTICE product README.md stages stage.sh templates
生成了stages目录,里面存放配置模板文件
# ls data kubernetes play-docker-compose.sh play-docker.sh play-kubernetes.sh ssl docker-compose play-consumer.sh play-docker-dledger.sh play-docker-tls.sh play-producer.sh
1、单机
./play-docker.sh alpine
2、docker-compose
./play-docker-compose.sh
3、kubernetes集群
./play-kubernetes.sh
4、Cluster of Dledger storage(RocketMQ需要4.4.0版本以上)
./play-docker-dledger.sh
5、TLS
./play-docker-tls.sh ./play-producer.sh ./play-consumer.sh
我这里选择的是单机部署,可以看到生成了两个容器
验证RocketMQ启动成功
1、使用命令 docker ps|grep rmqbroker 找到RocketMQ broker的容器id
2、使用命令 docker exec -it 5b557ea1e6be ./mqadmin clusterList -n {nameserver_ip}:9876 验证RocketMQ broker工作正常
#Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE DefaultCluster 5b557ea1e6be 0 172.17.0.8:10911 V4_7_1 0.00(0,0ms) 0.00(0,0ms) 0 447225.46 -1.0000
升级
cd image-build ./update.sh
安装GUI
golang client使用问题
由于使用的docker服务启动,broker的地址是内网地址,需要将地址修改为外网地址
# vi ../confbroker.conf
在文件中添加 brokerIP1=xxx.xxx.xxx.xxx
然后重启broker, docker restart 5b557ea1e6be
这里需要去修改启动脚本 ./play-docker.sh 里的start_namesrv_broker() 函数中的docker启动命令,在mybroker后面添加
-c ../conf/broker.conf
${TAG_SUFFIX} sh mqbroker -c ../conf/broker.conf
这样查看cluster会发现Address变成外网地址。
client-go Topic
client-go 生产者
panic(err) } }