Java互联网科技老男孩的成长之路

必须先理解的RocketMQ入门手册,才能再次深入解读

2020-04-15  本文已影响0人  java菲菲

1. 阿里架构师推荐学习的《RabbitMQ实战指南》,渣渣的你都看过吗?
2. 终极手撕之架构大全:分布式+框架+微服务+性能优化,够不够?

RocketMQ入门手册

RocketMQ是一个分布式、队列模型的开源消息中间件,前身是MetaQ,是阿里研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、高可靠、高实时、分布式特点,

同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物联网、车联网等。

具有以下特点:

RocketMQ 架构原理分析

RocketMQ 架构

image.png

NameServer (名称服务器):

Broker(消息服务器): 消息存储中心,接收来自 Producer 的消息并存储, Consumer 从这里取得消息

Producer (生产者):

Consumer(消费者):

Broker Server

Broker Server负责消息的存储和传递,消息查询,HA高可用等,Broker Server几个主要模块组成:

image.png

Remoting Module(远程模块):broker入口,处理来自客户端的请求

Client Manager(客户端管理):管理client(生产者/消费者)并维护消费者的主题订阅

Store Service(存储服务):提供简单的API中数据库中存储或查询消息

HA Service(高可用服务):提供master broker和slave broker之间的数据同步功能

Index Service(索引服务):将message建立索引来提供快速的查询能力

RocketMQ 整体流程

image.png
  1. 启动 NameServer,NameServer启动后进行端口监听,等待 Broker、Producer、Consumer 连上来,相当于一个路由控制中心
  2. Broker 启动,跟所有的 Namesrv 保持长连接,定时发送心跳包 心跳包中,包含当前 Broker 信息(IP+端口等)以及存储所有 Topic 信息 注册成功后,Namesrv 集群中就有 Topic 跟 Broker 的映射关系
  3. 收发消息前,先创建 Topic 。创建 Topic 时,需要指定该 Topic 要存储在哪些 Broker上。也可以在发送消息时自动创建Topic
  4. Producer 发送消息 启动时,先跟 Namesrv 集群中的其中一台建立长连接,并从Namesrv 中获取当前发送的 Topic 存在哪些 Broker 上 然后跟对应的 Broker 建立长连接,直接向 Broker 发消息
  5. Consumer 消费消息 跟其中一台 Namesrv 建立长连接,获取当前订阅 Topic 存在哪些 Broker 上 然后直接跟 Broker 建立连接通道,开始消费消息*RocketMQ的消息领域模型

RocketMQ Message

image.png

Topic(主题): 表示消息的第一级类型,是最细粒度的订阅单位(生产者传递消息和消费者提取消息标识)

Tag(标签): 表示消息的第二级类型,可以是使用相同的Topic不同的Tag来表示同一业务模块的不同任务的消息,比如交易消息又可以分为:交易创建消息,交易完成消息等

Message(消息体): 消息是要传递的信息。 Message中必须包含一个Topic,可选Tag和key-vaule键值对

Message Queue(消息队列): 所有消息队列都是持久化

Group(组): 分为Producer Group(生产者组)和Consumer Group(消费者组),具有相同角色组成Group

RocketMQ 特性

Message Model(消息模式):

Message Order(消息顺序)

Message Types(消息类型)

RocketMQ单机版安装

 # 下载$ 
  > wget wget http://mirror.bit.edu.cn/apache/rocketmq/4.6.0/rocketmq-all-4.6.0-source- > 
  # 解压$
  >unzip rocketmq-all-4.7.0-source-release.zip
  > cd rocketmq-all-4.7.0/
  # 编译$
  > mvn -Prelease-all -DskipTests clean install -U
  > cd distribution/target/rocketmq-4.7.0/rocketmq-4.7.0
 # 启动 Name Server 服务
 > nohup sh bin/mqnamesrv &
 # 启动完成后,查看日志$
 > tail -f ~/logs/rocketmqlogs/namesrv.log
  The Name Server boot success...

在 conf 目录下,RocketMQ 提供了多种 Broker 的配置文件:

 # 启动 Broker服务
 > nohup sh bin/mqbroker -n localhost:9876 &
 # 启动完成后,查看日志$
 > tail -f ~/logs/rocketmqlogs/broker.log 
  The broker[%s, 172.30.30.233:10911] boot success...

其中,参数:

 # 设置 Name Servers的地址$
 > 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...

作者:Ccww
原文链接:https://juejin.im/post/5e9571ccf265da47cd35733a

上一篇 下一篇

猜你喜欢

热点阅读