本文讲解下载并安装单机版RocketMq,mac环境。
要求:
你们机器应该有如下三项
Linux/Unix/Mac
64bit JDK 1.8+;
Maven 3.2.x
目前 RocketMQ 已经成为Apache 顶级项目 。 在阿里内部, RocketMQ 很好地服务了 集 团大大小小上千个应 用,在每年的双十一当天,更有不可思议的万亿级消息通过 RocketMQ 流转(在 2017 年的双十一当天,整个阿里巴巴集团通过 RocketMQ 流转的线上消息达到了 万亿级,峰值 TPS 达到 5600 万),在阿里大中台策略上发挥着举足轻重的作用 。
此外, RocketMQ 是使用 Java语言开发的,比起 Kafka 的 Scala语言和 RabbitMQ 的 Erlang 语 言,更容易找 到技术人员进行定制开发 。
1.RocketMQ 由四部分组成
发信者 ------------> Producer
收信者 -------------> Consumer
负责暂存 --------------> Broker
传输的邮局 -------------> NameServer
启动 RocketMQ 的顺序是先启动 NameServer,再启动 Broker,这时候消 息队列已 经可以提供服务了,想发送消息就使用 Producer来发送,想接收消息 就使用 Consumer来接收 。 很多应用程序既要发送,又要接收,可以启动多个Producer 和 Consumer 来发送多种消息,同时接收多种消息 。
2.rocketmq整体架构图(借鉴官方原图)
3.topic和broker、MessageQueue整体结构关系
图例解释:(这里只进行初步讲解,后续对具体的某个知识点具体详细总结,选读内容)
a、生产者和消费都是通过topic找到具体某大类消息类型进行消息的投递和消费,topic是rocketmq中一大类消息传递的桥梁
b、一个topic可以创建在一个broker上,也可以创建在多个broker上。如果消息创建在一个broker上那么消息会全部发送到指定的 broker中,一旦broker发生故障,那么当前topic对应的生产者和消费者是无法进行消息的投递和消费的,因此rocketmq提供了HA模式即高可用master-slave。
对当前brokerName进行下利用这主从配置,防止单点故障.一般数据量的情况种配置完全可以满足生产环境rocketmq的使用。但是消息数量达到一定程度的时候势必会对当前broker造成很大的压力,因此引出了另一种配置方式,一个topic配置在多个broker下面,多个broker共同完成消息的消费,分散broker的压力.
c、创建一个topic的时候会首先指定broker,然后指定broker下的读队列数量和写队列数量,还有当前topic的权限(2||4||6 ,2是写权限,4是读权限,6是读写权限)。我们可以理解为producer发送消息到设置好的MessageQueue中,单台broker的情况下MessageQueue是负载均衡的,一个topic的消息和负载的投递到不同的MessageQueue中,我们也可以在producer中指定发送到具体某个MessageQueue中。多个broker且集群模式下,MessageQueue是不共享的(当前broler只处理自己的MessageQueue),
而且从broker只负责读操作,并不负责写操作.只有主broker挂掉的时候从节电才会进行写操作.
d、ProcessQueue是MessageQueue的快照队列,在PushConsumer模式运行的情况下,每个MessageqQueue都会对应的创建一个ProcessQueue用具记录MessageQueue消息处理的快照。ProcessQueue对象中主要结构是一个TreeMap和一个读写锁,TreeMap中以MessageQueue的offset作为key,以消息内容的引用作为value,保存所有从MessageQueue中获取到但还没有被消费掉的消息.其中读写所控制着多个线程对于treeMap的访问.
4.那么RocketMq有什么用?
1.应用解藕
2.流量消峰:把一秒内下的订单分散成一段时间来处理,这时有些用户可 能在下单后十几秒才能收到下单成功的状态,但是也比不能下单的体验要好。
3.消息分发:数据的产生方只 需要把各自的数据写人一个消息队列即可 数据使用方根据各自需求订阅感兴 趣的数据,不同数据团队所订阅的数据可以重复也可以不重复,互不干扰,也 不必和数据产生方关联
除了上面列出的应用解棉、流量消峰、消息分发等功能外,消息队列还有保证最终一致性、方便动态扩容等功能。
链接:http://rocketmq.apache.org/dowloading/releases/ 随便找一个 4.x版本的,笔者用的是4.3
也可以去阿帕奇官网下载,点红色的地方。
双击解压包
打开终端进入到rocketmq-all-4.3.0下 执行,过程大概一分多钟,安装完会看到你多了target文件夹
mvn -Prelease-all -DskipTests clean install -U
下面我对上面截图中最后一个目录进行解释:
LICENSE、 NOTICE 和 README.md 包括 一 些版权 声 明和功能说明信息;
benchmark里包括运行 benchmark程序的 shell脚本;
bin文件夹里含有各种使 用 RocketMQ 的 shell 脚本( Linux 平台)和 cmd 脚本( Windows 平台),比如 常用的启动 NameServer 的脚 本 mqnamesrv,启动 Broker 的脚本 mqbroker, 集 群管理脚本 mqadmin 等 ;
conf文件夹里有一些示例配置文件,包括三种方式的 broker配置文件、 logback 日志配置文件等,用户在写配置文件的时候,一般基 于这些示例配置文件,加上 自 己特殊的需求即可;
lib文件夹里包括 RocketMQ 各个模块编译成的 jar包,以及 RocketMQ 依赖的 一 些 jar包,比如 Netty、 commons-lang、 FastJSON 等 。
启动 NameServer--传输的邮局
进入/Users/yanlin/Downloads/工具/rocketmq-all-4.3.0/distribution/target/apache-rocketmq
执行 nohup sh bin/mqnamesrv &
启动后查看日志 tail -f ~/logs/rocketmqlogs/namesrv.log
启动 Broker--负责暂存
启动 nohup sh bin/mqbroker -n localhost:9876 &
[2] 5928
查看日志 appending output to nohup.out
用命令行发送和接收消息
发送
rocketmq-all-4.3.0/distribution/target/apache-rocketmq 当前目录下
执行 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 省略
关闭消息队列
消息队列被启动后,如果不主动关闭, 则 会一直在后台运行,占用系统资 源 。 我们有专 门用来关闭 NameServer 和 Broker 的命令 。
关闭 NameServer 和 Broker:
执行 sh bin/mqshutdown broker
效果 The mqbroker (36695) i s running ...
Send shutdown request to mqbroker (36695 ) OK
执行 sh bin/mqshutdown namesrv
效果 The mqnamesrv (36664) is running...
Send shutdown request t o mqnamesrv (36664) OK
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_38003389/article/details/86505677
内容来源于网络,如有侵权,请联系作者删除!