关系梳理
对于RocketMQ的生产者、消息、消费者、消费者分组、主题、队列、订阅关系的梳理
主题: 主题是订阅的首要关系,不管是生产者还是消费者都是和主题进行关联订阅,而主题内是由队列组成,队列拥有读、写等权限控制,主题通过队列进行横向扩展,来提要主题的性能,主题是存储消息的实际。
消息: 消息是队列内信息流通的最小粒子,消息本身拥有一定的特性,如延迟消息等。
生产者: 生产者通过向指定的主题发送消息完成生产任务,更多理解暂时没有
消费者: 消费者必定需要提起续费这分组,因为消费者与主题之间的订阅关系是由消费者分组完成的,换句话说,消费者与主题没有直接关系,与主题有直接关系的是消费者组,消费者组通过订阅关系与主题构建关联,而消费者属于消费者组,那么在消费者组得到消息之后,通过进一步的消息订阅关系分发给组下面的消费者,需要注意的是,在同一个消费者分组下的消费者,其订阅关系必须保持一致性,如果多个消费者分组订阅同一个主题,那么这个主题的消息会分发给所有的消费者分组。
RocketMQ与Systemd
RocketMQ的安装比较简单,只需要提供了JAVA_HOME环境,之后运行对于的脚本即可,所以这里主要介绍的RocketMQ与Systemd的配置,结合Shell脚本,一次性的启用namsesrv和borker以及web管理工具rocketmq-dashboard
版本
Java: openjdk-11
RocketMQ: rocketmq-all-5.0.0-bin-release.zip
下载
RocketMQ Dashboard: rocketmq-dashboard-rocketmq-dashboard-1.0.0.tar.gz
源码地址,该项目需要自己编译成jar包
在下载了RocketMQ的二进制包之后,解压到指定位置,而后配置对于的namesrv
和borker
服务,systemd的服务配置在/usr/lib/systemd/system/
或者/etc/systemd/system/
目录下
rmq_namesrv.service
[Unit]
Description=rocketmq namesrv
After=network.target
[Service]
Type=simple
ExecStart=/opt/rocketmq-all-5.0.0-bin-release/bin/mqnamesrv
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=//opt/rocketmq-all-5.0.0-bin-release/bin/mqshutdown namesrv
[Install]
WantedBy=mulitiple-rmq-namesrv.target
rmq_borker.service
[Unit]
Description=rocketmq broker
After=network.target
[Service]
Type=simple
ExecStart=/opt/rocketmq-all-5.0.0-bin-release/bin/mqbroker -n localhost:9876 --enable-proxy
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/opt/rocketmq-all-5.0.0-bin-release/bin/mqshutdown broker
[Install]
WantedBy=multiple-rmq-broker.target
在配置了这两个服务之后,即可通过systemctl start/stop/restart来执行服务了,由于每次都需要启动namesrv
和borker
服务还有web管理工具过于麻烦,所以引入shell
脚本进行处理
rocketmq.shell
#!/bin/bash
instruct=$1
echo $instruct
case $instruct in
'start')
systemctl start rmq_namesrv
systemctl start rmq_borker
export NAMSESRV_ADDR=localhost:9876
nohup java -jar /opt/rocketmq-dashboard-rocketmq-dashboard-1.0.0/target/rocketmq-dashboard-1.0.0.jar > /root/rocketmq-dashboard.log &
echo $! > /root/rmq-d-pid
echo "RocketMQ Start SUCCESS PID: " + $!
;;
'stop')
systemctl stop rmq_namesrv
systemctl stop rmq_borker
PID=$(cat /root/rmq-d-pid)
kill -9 ${PID}
echo "RocketMQ Stop SUCCESS"
;;
*)
echo "Input instruct error"
;;
esac
可以通过执行该shell脚本对RocketMQ进行启动和关闭