RocketMQ原理解析之服务安装启动

本文介绍了RocketMQ的基本概念,如应用解耦、流量削峰和消息并发,并详细阐述了单机版RocketMQ的安装步骤,包括下载、解压、启动服务及关闭操作。此外,还提及了多机集群配置和部署的初步架构。

一、RocketMQ简介

    阿里的消息中间件有很长的历史,从2007 年的Notify 到2010 年的Napoli,2011 年升级后改为MetaQ ,然后到2012 年开始做RocketMQ, RocketMQ 使用Java 语言开发,于2016 年开源。第一代的Notify 主要使用了推模型(push),解决了事务消息;第二代的MetaQ 主要使用了拉模型(pull),解决了顺序消息和海量堆积的问题。RocketMQ 基于长轮询的拉取方式, 兼有两者的优点。
    消息队列是基于“先进先出(FIFO)” 的一种数据结构, 随着互联网的发展,“微架构” 的模式不段兴起, 这些微服务可以再同一个局域网内,也可以跨机房部署,这使得服务之间松耦合要求越来越高, 并且服务之间的联系越来越紧密。这对通信质量要求越来越高, 对消息队列也有了更高的要求。

二、消息队列提供的功能

2.1 应用解耦

    复杂的应用里会存在多个子系统, 比如:电商系统中有 会员中心、用户中心、交易中心、支付中心、营销中心、库存中心、物流中心、通用中心等。传统的开发是前面的各个中心放在一个应用中, 这使得各个子系统之间的耦合性太高了,整个系统的可用性比较低, 即使各个子模块是低错误率系统,但是整合到一起可能会是一个高错误率的系统。
举例: 以电商系统为例,用户在创建订单后,如果耦合调用库存系统,物流系统,支付系统,当其中一个子系统出现问题或者进行升级,都会造成整个下单流程失败, 严重影响用户的体验。
    如果系统之间的调用通过消息队列,系统的可用性会提高很多, 还是参照上面的例子, 如果物流系统出现BUG或者在进行升级, 可以将消息缓存在消息队列中, 在服务可以正常使用时再进行后续处理,保证这个服务再宏观上时可用的,终端客户也不会感受到故障的发生。
    可以参照下面的图进行比较:
RocketMQ 应用解耦

图一、RocketMQ应用解耦

2.2 流量削峰

    在高并发的场景下,大部分应用系统的流量会达到峰值,如果没有缓存机制,不可能承受住短时间内大流量冲击,如果利用消息队列,将消息请求暂存起来,分散到较长的时间来处理,能很大程度提高系统稳定性和用户体验。
    比如: 订单系统处理能力是5000次/s,如果在秒杀、其它高并发场景, 当请求处理超过5000, 只能拒绝之后的请求,如果将请求暂存在消息队列中,分散在较长的一段时间来处理,比如十几秒之后客户收到订单成功消息,这个是可以接受的,相较与下单失败,有很高的用户体验。

2.3 消息并发

    在整个应用系统中,数据是不断产生的,数据产生方只需要将各自的数据协议消息队列,数据使用方只需要订阅自己感兴趣的消息即可,不同模块之间互不干扰, 不需要和数据产生方有关联。
    可以通过下面的图示进行理解:
消息队列的消息分发功能

图二、消息队列的消息分发功能
    通过上面的图示, 各个子系统将日志数据不停地写人消息队列,不同的数据处理系统有各自的Offset ,互不影响。甚至某个团队处理完的结果数据也可以写人消息队列,作为数据的产生方,供其他团队使用,避免重复计算。

    除了上面提到的功能, RocketMQ还具有 最终一致性、方便动态扩容 功能,后期再进行补充。

三、RocketMQ服务安装

3.1 单机版RockMQ安装

     RocketMQ安装存在两种方式(本文只介绍第一种)

  1. Binary版, 一些编译好的jar和辅助shell脚本
  2. Source版, RocketMQ源码, 需要自己通过maven编译
    下图是官网(http://rocketmq.apache.org/dowloading/releases/)给的下载文件
    RocketMQ安装文件下载

     查看官方文档, 系统要求如下:

  • 推荐系统: 64bit OS, Linux/Unix/Mac
  • JDK: 64bit JDK 1.8+
  • Maven 3.2.x
  • Git

注: 其中maven 、git是针对源码安装的

3.1.1 下载文件

> wget -c http://mirror.bit.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip

3.1.2 解压文件

> unzip rocketmq-all-4.2.0-bin-release.zip -d ./rocketmq-all-4.2.0-bin
> cd rocketmq-all-4.2.0-bin

    RocketMQ的目录结构如下(下面是Win10中的视图, 不是Linux中的视图, 但是文件的内容一样):
RocketMQ Binary 包含的内容视图

  • benchmark 里包括运行benchmark 程序的shell 脚本
  • bin , 文件夹中包含RocketMQ使用的各种shell脚本(Linux平台) 和 cmd脚本(win平台), 比如: mqnamesrv(启动nameserver), mqbroker(启动Broker)
  • conf, 里面有一些示例配置文件, 参考下面图示
    RocketMQ conf 目录包含内容
  • lib 文件夹里包括RocketMQ各个模块编译成的jar 包,以及RocketMQ 依赖的一些jar 包,比如Netty 、commons - lang 、FastJSON 等
  • LICENSE 、NOTICE 和README.md 包括一些版权声明和功能说明信息

3.1.3 启动消息队列服务

  • 启动NameServer

> nohup sh bin/mqnamesrv &

  • 启动broker

> nohup sh bin/mqbroker -n localhost:9876 &

3.1.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.1.5 关闭消息队列

    消息队列被启动后, 如果不主动关闭,会一直在后台运行,占用系统资源。

  • 关闭broker

> sh bin/mqshutdown broker

  • 关闭namesrv

> sh bin/mqshutdown namesrv

经过上面的操作流程, 一个简单的RocketMQ已经安装好了。

3.2 多机集群配置和部署

    本节介绍如何搭建三主、三从、无单点故障的高可用RocketMQ集群,假设这里有3台物理机,IP分别是192.168.1.19,192.168.1.20,192.168.1.21

注:这里每台物理机上会有一主,一从RocketMQ Broker服务器,如果主从不放在一台物理机上,可以分开部署, 操作和下面区别不大。

3.2.1 部署架构

RoketMQ 集群搭建架构图

图三、RoketMQ 集群搭建架构图
## 3.2.1 启动多个NameSrv     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值