RocketMQ使用

RocketMQ使用,第1张

RocketMQ使用 一、概述

rocketmq详解(全)

NameServer

NameServer可以部署多个,相互之间独立,其他角色同时向多个NameServer机器上报状态信息,从而达到热备份的目的。
NameServer本身是无状态的,也就是说NameServer中的Broker、Topic等状态信息不会持久存储,都是由各个角色定时上报并
存储到内存中的(NameServer支持配置参数的持久化,一般用不到)。

心跳机制

单个Broker跟所有Namesrv保持心跳请求,心跳间隔为30秒,心跳请求中包括当前Broker所有的Topic信息。Namesrv会反查Broer的心跳信息, 如果某个Broker在2分钟之内都没有心跳,则认为该Broker下线,调整Topic跟Broker的对应关系。但此时Namesrv不会主动通知Producer、Consumer有Broker宕机。
Consumer跟Broker是长连接,会每隔30秒发心跳信息到Broker。Broker端每10秒检查一次当前存活的Consumer,若发现某个Consumer 2分钟内没有心跳, 就断开与该Consumer的连接,并且向该消费组的其他实例发送通知,触发该消费者集群的负载均衡(rebalance)。
生产者每30秒从Namesrv获取Topic跟Broker的映射关系,更新到本地内存中。再跟Topic涉及的所有Broker建立长连接,每隔30秒发一次心跳。
在Broker端也会每10秒扫描一次当前注册的Producer,如果发现某个Producer超过2分钟都没有发心跳,则断开连接。

  • Namesrv压力不会太大,平时主要开销是在维持心跳和提供Topic-Broker的关系数据。但有一点需要注意,Broker向Namesrv发心跳时,
    会带上当前自己所负责的所有Topic信息,如果Topic个数太多(万级别),会导致一次心跳中,就Topic的数据就几十M,网络情况差的话,
    网络传输失败,心跳失败,导致Namesrv误认为Broker心跳失败。
二、安装使用

Linux 搭建单机版RocketMq
0、安装jvm
oracle jvm下载
Linux 安装配置JDK
rocketmq是基于JVM运行的,所以要有java 环境 java -version 查看,没有则需要安装,并配置JAVA_HOME环境变量。

1、目录结构
下载rocketmq:http://rocketmq.apache.org/

/bin					启动脚本,包括shell脚本和cmd脚本
/conf				    实例配置文件,包括broker配置文件、logback配置文件等					
/lib					依赖jar包,包括netty、commons-lang、FastJSON等

2、内存修改
1)修改runserver.sh

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn512m -XX:metaspaceSize=128m -XX:MaxmetaspaceSize=320m"

2)修改runbroker.sh配置

[root@localhost bin]# vim runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

3)修改tools.sh配置

[root@localhost bin]# vim tools.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m"
内存修改:
	Rocketmq默认的虚拟机内存较大,启动broker如果因为内存不足失败,需要编辑如下两个配置文件,去修改JVM内存大小	
	vi runbroker.sh     //Broker设置:     D:RocketMQbinrunbroker.cmd
	vi runserver.sh     //NameServer设置: D:RocketMQbinrunserver.cmd
	#编辑runbroker.sh和runserver.sh修改默认JVM大小
	#参考设置
	JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -xx:metaspaceSize=128m xx:MaxmetaspaceSize=320m"

端口:
	开启端口:10911 10912 10909 9876

启动位置
	bin目录


3、启动
(1)NameServer启动( 默认4g)

位置
	RocketMQ目录下的bin目录

本地部署(linux)
	nohup sh mqnamesrv &								启动NameServer
	tail -f ~/logs/rocketmqlogs/namesrv.log				查看日志

外网部署
	nohup sh mqnamesrv  -n "192.168.33.100:9876" &		启动NameServer
	tail -f ~/logs/rocketmqlogs/namesrv.log				查看日志

(2)brocker启动

位置
	RocketMQ目录下的bin目录

本地部署(linux)
	nohup sh mqbroker -n localhost:9876 &		启动Broker
	tail -f ~/logs/rocketmqlogs/broker.log		查看启动日志

外网部署
	echo 'brokerIP1=192.168.33.100' > ../conf/broker.properties
	nohup sh mqbroker -n localhost:9876 -c ../conf/broker.properties autoCreateTopicEnable=true &
	tail -f ~/logs/rocketmqlogs/broker.log		查看启动日志

修改broker.conf
官网的这个启动命令特别坑,启动时broker会通过私有ip启动,会导致客户端无法远程连接,所以启动之前我们需要修改一下配置文件,主要是改broker.conf文件

再次通过启动命令:

nohup sh bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true -c conf/broker.conf &

(3)测试

//发送
export NAMESRV ADDR=localhost:9876
bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
//接收
bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
含义
	在发送或接收消息之前,开发者需要通知客户端name servers 的位置。RocketMQ提供多种实现方式。为了简单起见,下方展示环境变量NAMESRV_ADDR的用法

发送消息(bin目录下)
	设置环境变量:export NAMESRV_ADDR=localhost:9876
	使用安装包的Demo发送消息: sh tools.sh org.apache.rocketmq.example.quickstart.Producer

接收消息 (bin目录下)
	设置环境变量:export NAMESRV_ADDR=localhost:9876
	接受消息:sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

	jps查看进程号

(4)关闭RocketMQ

位置
	RocketMQ的bin目录
命令
	sh mqshutdown namesrv			关闭NameServer
	sh mqshutdown broker     		关闭Broker

4、管理工具

使用方式
	进入RocketMQ安装位置,在bin目录下执行./mqadmin {admin} {args}
命令介绍
	updateTopic[创建Topic]
	类路径[com.alibaba.rocketmq.tools.command.topic.UpdateTopicSubCommand] 	
	参数			是否必填				说明
	-b			如果-c为空,则必填		broker 地址,表示topic 建在该broker
	-c			如果-b为空,则必填		cluster 名称,表示topic 建在该集群(集群可通过clusterList 查询)
	-h			否					打印帮助
	-n			是					nameserve 服务地址列表,格式ip:port;ip:port;...
	-r 			否					可读队列数(默认为8)
	-w			否					可写队列数(默认为8)
注意事项
	几乎所有命令都需要配置-n 表示NameServer地址,格式为ip:port;
	几乎所有命令都可以通过-h获取帮助;
	如果既有Broker地址(-b)配置项又有clusterName(-c)配置项,则优先以Broker地址执行
	命令;如果不配置Broker地址,则对集群中所有主机执行命令

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5695770.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存