RocketMQ(二)RocketMQ安装部署

1 RocketMQ 整体架构设计

RocketMQ整体的架构设计主要分为四大部分,分别是:Producer、Consumer、Broker、NameServer。

  • Producer:就是消息生产者,可以集群部署。它会先和 NameServer 集群中的随机一台建立长连接,得知当前要发送的 Topic 存在哪台 Broker Master上,然后再与其建立长连接,支持多种负载平衡模式发送消息。
  • Consumer:消息消费者,也可以集群部署。它也会先和 NameServer 集群中的随机一台建立长连接,得知当前要消息的 Topic 存在哪台 Broker Master、Slave上,然后它们建立长连接,支持集群消费和广播消费消息。
  • Broker:主要负责消息的存储、查询消费,支持主从部署,一个 Master 可以对应多个 Slave,Master 支持读写,Slave 只支持读。Broker 会向集群中的每一台 NameServer 注册自己的路由信息。
  • NameServer:是一个很简单的 Topic 路由注册中心,支持 Broker 的动态注册和发现,保存 Topic 和 Borker 之间的关系。通常也是集群部署,但是各 NameServer 之间不会互相通信, 各 NameServer 都有完整的路由信息,即无状态。

用一段话来概括它们之间的交互:先启动 NameServer 集群,各 NameServer 之间无任何数据交互,Broker 启动之后会向所有 NameServer 定期(每 30s)发送心跳包,包括:IP、Port、TopicInfo,NameServer 会定期扫描 Broker 存活列表,如果超过 120s 没有心跳则移除此 Broker 相关信息,代表下线。

这样每个 NameServer 就知道集群所有 Broker 的相关信息,此时 Producer 上线从 NameServer 就可以得知它要发送的某 Topic 消息在哪个 Broker 上,和对应的 Broker (Master 角色的)建立长连接,发送消息。

Consumer 上线也可以从 NameServer 得知它所要接收的 Topic 是哪个 Broker ,和对应的 Master、Slave 建立连接,接收消息。

2 RocketMQ 安装部署

注意:安装rocketmq需要提前安装好jdk和maven

2.1 下载安装

获取rocketmq

wget https://archive.apache.org/dist/rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zip

解压

unzip rocketmq-all-4.8.0-bin-release.zip

如果没有unzip命令,可以用yum 安装 unzip yum install -y unzip zip

2.2 修改堆内存大小

修改bin/runbroker.shrunserver.sh中堆内存大小

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m"

2.3 启动RocketMQ

bin目录
在这里插入图片描述

2.3.1 启动NameServer
nohup sh mqnamesrv &

查看启动日志

tail -f ~/logs/rocketmqlogs/namesrv.log

RocketMQ(二)RocketMQ安装部署_第1张图片

2.3.2 启动Broker
# 1.启动Broker
nohup sh mqbroker -n localhost:9876 &
# 2.查看启动日志
tail -f ~/logs/rocketmqlogs/broker.log

2.4 发送接收消息测试

打开两个shell终端,一个发送消息,一个接收消息,在切换到bin目录下export NAMESRV_ADDR=localhost:9876

发送消息

export NAMESRV_ADDR=localhost:9876
sh tools.sh org.apache.rocketmq.example.quickstart.Producer

接收消息

sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

在这里插入图片描述
在这里插入图片描述

2.4 关闭Server

无论是关闭name server还是broker,都是使用bin/mqshutdown命令

sh mqshutdown broker

sh mqshutdown namesrv

2.5 可视控制台Dashboard安装

Dashboard是一个Java web 项目,Maven工程。通过源码编译成jar包后启动即可通过浏览器访问。通过html界面可以查看RockeMQ集群状态、创建/删除Topic、生产/消费等。

2.5.1 下载编译
wget https://github.com/apache/rocketmq-dashboard/archive/refs/tags/rocketmq-dashboard-1.0.0.tar.gz

解压之后编译

mvn clean package -Dmaven.test.skip=true -f rocketmq-dashboard-rocketmq-dashboard-1.0.0

编译完成就可以在项目traget目录下获得tar包

2.5.2 启动

前台启动:java -jar rocketmq-dashboard-1.0.0.jar

后台启动 nohup java -jar rocketmq-dashboard-1.0.0.jar &

查看进程: ps -ef | grep rocketmq-dashboard-1.0.0.jar

杀死进程:kill -9 pid

安装完成后通过 8080 端口访问,如 http://localhost:8080/RocketMQ(二)RocketMQ安装部署_第2张图片

2.5.3 其他地方启动

由于我的centos只有4G内存,为了避免内存不足,我打算本地电脑启动

同样下载源码,在idea中运行springboot项目,修改配置文件。

如果不填namesrvAddr,默认为localhost:9876
RocketMQ(二)RocketMQ安装部署_第3张图片

由于我的rocketmq在腾讯云中,本地运行后会抛出异常

java.lang.RuntimeException: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to 172.17.0.1:10909 failed
	at com.google.common.base.Throwables.propagate(Throwables.java:241)
	at org.apache.rocketmq.dashboard.task.DashboardCollectTask.collectTopic(DashboardCollectTask.java:161)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)

解决办法:

找到rocketmq中的conf文件,找到border.conf,然后添加brokerIP1=腾讯云外网ip

在这里插入图片描述

brokerIP1 = 公网ip
namesrvAddr = 127.0.0.1:9876

Rocket 使用 SQL 过滤, 还需要再broker.conf文件中添加配置enablePropertyFilter=true

切记:修改配置后要这样启动 (启动broker 加载指定配置文件)

nohup sh mqbroker -n 127.0.0.1:9876 -c ../conf/broker.conf &

你可能感兴趣的:(MQ,rockermq,MQ)