mq有很多,近期买了《分布式消息中间件实践》这本书,学习关于mq的相关知识。mq大致有有4个功能:
低延时的分布式消息处理平台,高性能,可扩展,万亿级。由4个部分构成。name server,broker(消息代理人),producer,consumers。这4个都能水平扩展(做成集群的方式)来避免单点故障。
NameServer是一个完整的功能性服务。主要包含以下两个方面:
有4种方式用于客户端指定NameServer的地址。
producer.setNamesrvAddr("ip:port")
rocketmq.namesrv.addr
NAMESRV_ADDR
提供轻量的服务发现与路由,每一个Name Server记录完整的路由信息,提供相应的读写服务,同时支持快速存储扩展。
Broker负责消息的存储和分发,消息查询,高可用保证等。模块如下图所示。
所以,他有以下几个比较重要的子模块:
通过提供轻量级的主题队列机制来负责消息的储存。支持推拉模式,包含错误容忍机制(2或3份拷贝)。消息的顺序处理。提供容灾回复,预警机制等。
生产者提供分布式部署。分布式的生产者通过负载均衡的方式发送消息给Broker。支持快速错误反馈,并且低延迟。
消费者也支持在推/拉模式中的分布式部署。支持集群消费+消息广播。提供实时的消息订阅机制以满足大部分需求。
安装包就好(源码也行),然后解压
wget http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.5.1/rocketmq-all-4.5.1-bin-release.zip
unzip rocketmq-all-4.5.1-bin-release.zip -d /usr/lib/rocketmq/
#配置64位jdk是必须的---这里跳过
export ROCKETMQ_HOME=/usr/lib/rocketmq/rocketmq #这个不是必须,只是方便下面操作
source ~/.bash_profile #使配置生效一下
rm -f ~/logs/rocketmqlogs/*.log # 把日志清了,方便查看
rocketmq默认的内存配置要求对我们的测试服务器要求太高了,改低一点。
vim $ROCKETMQ_HOME/bin/runserver.sh
# 把第39行改成
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g" #最小,启动,最大都是1g
vim $ROCKETMQ_HOME/bin/runbroker.sh
# 把39行改成
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g" # 同上面
vim $ROCKETMQ_HOME/conf/broker.conf
# 加这些配置
brokerIP1 = 192.168.3.20 #此broker的ip
namesvrAddr=192.168.3.20:9876 #nameServer地址,集群的话需要分号分隔。
因为需要NameServer来管理Broker,所以先启动NameServer。默认的日志地址为~/logs/rocketmqlogs
。
nohup sh $ROCKETMQ_HOME/bin/mqnamesrv & # 以忽略挂起信号的方式启动nameserver
tail -f ~/logs/rocketmqlogs/namesrv.log # 监控的方式查看日志尾部
消息要通过Broker来分发,NameServer也已经启动,所以现在可以启动Broker。
nohup sh $ROCKETMQ_HOME/bin/mqbroker -c $ROCKETMQ_HOME/conf/broker.conf &
tail -f ~/logs/rocketmqlogs/broker.log
这里需要去下载这个,里面有个rocketmq-console。需要修改一个地方。rocketmq-externals/rocketmq-console/src/main/resources/application.properties
,
rocketmq.config.namesrvAddr=192.168.3.20:9876 #改成对应的namesrvAddr 地址
服务器上需要开放几个端口用于console的连接,如果没有配置,就是默认的:9876,10911,10909
firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --reload
然后就能查看了。
后续通过代码客户端的方式来实践。
sh $ROCKETMQ_HOME/bin/mqshutdown broker #先关了Broker
sh $ROCKETMQ_HOME/bin/mqshutdown namesrv #再关闭nameserver