【RocketMq实战第一篇】-RocketMq下载与安装

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38003389/article/details/86505677

前言

本文讲解下载并安装单机版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

 

感兴趣请关注微信公众号

 

 

 

 

 

 

展开阅读全文

没有更多推荐了,返回首页