MQ概述及RocketMQ在Linux下的安装和启动
MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。RocketMQ是一个统一消息引擎、轻量级数据处理平台,是⼀款阿⾥巴巴开源的消息中间件。2016年11⽉28⽇,阿⾥巴巴向 Apache 软件基⾦会捐赠RocketMQ,成为 Apache 孵化项⽬。2017 年 9 ⽉ 25 ⽇,Apache 宣布 RocketMQ孵化成为 Apa
目录
一、MQ概述
1.1、MQ简介
MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。
1.2、MQ用途
从网上可以查看到很多的关于MQ用途的叙述,但总结起来其实就以下三点:
1.限流削峰
MQ可以将系统的超量请求暂存其中,以便系统后期可以慢慢进行处理,从而避免了请求的丢失或系统被压垮。
2.异步解耦
上游系统对下游系统的调用若为同步调用,则会大大降低系统的吞吐量与并发度,且系统耦合度太高。
而异步调用则会解决这些问题。所以两层之间若要实现由同步到异步的转化,一般性做法就是,在这两层间添加一个MQ层。
3.数据收集
分布式系统会产生海量级数据流,如:业务日志、监控数据、用户行为等。针对这些数据流进行实时或批量采集汇总,然后对这些数据流进行大数据分析,这是当前互联网平台的必备技术。通过MQ完成此类数据收集是最好的选择。
1.3、MQ劣势
系统可用性降低
系统引入的外部依赖越多,系统稳定性越差。一旦 MQ 宕机,就会对业务造成影响。需利用各种手段提高MQ的可用性。
系统复杂度提高
MQ 的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过 MQ 进行异步调用。 需要处理MQ的可靠性问题,防止消息丢失。
1.4、MQ可靠性核心问题
生产者发送消息的可靠性
生产者如何确保成功发送消息到MQ。 同步重试还是异步回调。
MQ自身可靠性
已返回成功接收消息时,如何确保消息不丢失。—— 持久化机制。
消费者消费消息的可靠性
如何确保一定有消费者成功消费消息。—— 如何ACK。
二、RocketMQ简介
官方:https://rocketmq.apache.org/
RocketMQ是一个统一消息引擎、轻量级数据处理平台,是⼀款阿⾥巴巴开源的消息中间件。2016年11⽉28⽇,阿⾥巴巴向 Apache 软件基⾦会捐赠RocketMQ,成为 Apache 孵化项⽬。2017 年 9 ⽉ 25 ⽇,Apache 宣布 RocketMQ孵化成为 Apache 顶级项目(TLP ),成为国内⾸个互联⽹中间件在 Apache 上的顶级项⽬。
三、RocketMQ的安装与启动
3.1基本概念
3.1.1 消息(Message)
消息是指,消息系统所传输信息额物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。
3.1.2 主题(Tpotic)
Topic表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。 其实主题就是把消息进行分类。
一个生产者可以同时发送多种Topic的消息;而一个消费者只对某种特定的Topic感兴趣,即只可以订阅和消费一种Topic的消息。
生产者对主题为一对多;消费者对主题为一对一
producer:topic 1:n consumer:topic 1:1
主题对信息为一对多;信息对主题为一对一
topic:message 1:n message:topic 1:1
3.2单机安装与启动
3.2.1准备工作
软硬件需求:系统要求是64位的,JDK要求是1.8及其以上版本的。
下载RocketMQ安装包:
https://archive.apache.org/dist/rocketmq/4.9.0/rocketmq-all-4.9.0-bin-release.zip
将下载的安装包上传到Linux(也可以直接使用wget命令下载到Linux)
[root@iZ2ze2rikqlh3ql1n2cw61Z soft]# yum install -y unzip
[root@iZ2ze2rikqlh3ql1n2cw61Z soft]# unzip rocketmq-all-4.9.0-bin-release.zip
[root@iZ2ze2rikqlh3ql1n2cw61Z soft]# cd rocketmq-all-4.9.0-bin-release/
[root@iZ2ze2rikqlh3ql1n2cw61Z rocketmq-all-4.9.0-bin-release]# ll
total 48
drwxr-xr-x 2 root root 4096 Jun 11 2021 benchmark
drwxr-xr-x 3 root root 4096 Jun 11 2021 bin
drwxr-xr-x 6 root root 4096 Jun 11 2021 conf
drwxr-xr-x 2 root root 4096 Jun 11 2021 lib
-rw-r--r-- 1 root root 17327 Jun 9 2021 LICENSE
-rw-r--r-- 1 root root 1338 Jun 9 2021 NOTICE
-rw-r--r-- 1 root root 5132 Jun 9 2021 README.md
3.2.2、修改初始内存
3.2.2.1、修改runserver.sh
使用vim命令打开bin/runserver.sh文件。现将这些值修改为如下:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
3.2.2.2、修改runbroker.sh
使用vim命令打开bin/runbroker.sh文件。现将这些值修改为如下:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g"
3.2.3启动
启动NameServer
### start namesrv
$ nohup sh bin/mqnamesrv &
### verify namesrv
$ tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
查看进程:
[root@iZ2ze2rikqlh3ql1n2cw61Z rocketmq-all-4.9.0-bin-release]# jps
20147 NamesrvStartup
20167 Jps
启动 Broker
### start broker
$ nohup sh bin/mqbroker -n localhost:9876 &
### verify broker
$ tail -f ~/logs/rocketmqlogs/broker_default.log
The broker[broker-a,192.169.1.2:10911] boot success...
3.2.4、发送/接收消息测试
$ export NAMESRV_ADDR=localhost:9876
$ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId= ...
$ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_%d Receive New Messages: [MessageExt...
3.5、关闭Server
$ sh bin/mqshutdown broker
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK
$ sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK
四、控制台的安装和启动
4.1、是什么
RocketMQ有一个可视化的dashboard,通过该控制台可以直观的查看到很多数据。
4.2、下载地址
官方地址:https://github.com/apache/rocketmq-dashboard
4.3、修改配置
修改其src/main/resources中的application.properties配置文件。
原来的端口号为8080,修改为一个不常用的,如7777
指定RocketMQ的name server地址(即要访问的linux虚拟机IP地址)
4.4、添加依赖
在解压目录rocketmq-console的pom.xml中添加如下JAXB依赖。
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
4.5、打包
在rocketmq-console目录下运行maven的打包命令。
mvn clean package -Dmaven.test.skip=true
4.6、启动控制台
java -jar target/rocketmq-dashboard-1.0.1-SNAPSHOT.jar
4.7、访问控制台
更多推荐
所有评论(0)