rocketmq入门到精通—rocketmq学习入门指南|rocketmq服务发现(nameserver)精讲

author author     2022-12-05     776

关键词:

名言警句


任何先进的技术均与魔法无异


追本溯源

​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​


NameServer前提概要

RocketMQ 中,Name Servers被设计用来做简单的路由管理。其职责包括。

  • Brokers定期向每个NameServer注册路由数据(topic以及生产者信息\\消费者
    \\等其他信息)。
  • NameServer为客户端,包括生产者,消费者和命令行客户端提供最新的路由信息。

再详细交接NameServer之前,看看RocketMQ发展的几个阶段,看看为啥要有NameServer的存在

RocketMQ的消息模型(第一阶段)

RocketMQ的基础消息模型,一个简单的Pub/Sub模型

【RocketMQ入门到精通】—

基本消息系统模型

      上图就是一个基本的消息系统模型,包括生产者 (Producer)消费者 (Consumer),中间进行基于消息主题(Topic)的消息传送。

      基于主题的系统中,消息被发布到TopicMessageQueue上。消费者将收到其订阅主题上的所有消息,生产者负责定义订阅者所订阅的消息类别。这是一个基础的概念模型,而在实际的应用中,结构会更复杂。例如为了支持高并发和水平扩展,中间的消息主题需要进行分区,同一个Topic会有多个生产者,同一个信息会有多个消费者,消费者之间要进行负载均衡等。

回顾知识点
生产者

负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。

消费者

负责消费消息,一般是后台系统负责异步消费。一个消息消费者会从Broker服务器拉取消息、并将其提供给应用程序。从用户应用的角度而言提供了两种消费形式:拉取式消费、推动式消费。

主题

表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。​

RocketMQ的消息模型(第二阶段)

【RocketMQ入门到精通】—

扩展的消息系统模型

      一个扩展后的消息模型,包括两个生产者两个消息Topic,以及两组消费者 Comsumer。存储消息Topic的 代理服务器Broker ),是实际部署过程对应的代理服务器。

  • 为了消息写入能力的水平扩展,RocketMQ对Topic进行了分区,被称为队列(MessageQueue)。
  • 为了消费能力的水平扩展,ConsumerGroup的概念应运而生。
  • 相同的ConsumerGroup下的消费者主要有两种负载均衡模式,即广播模式,和集群模式(图中是最常用的集群模式)。
  • 在集群模式下,同一个 ConsumerGroup 中的 Consumer 实例是负载均衡消费,如图中 ConsumerGroupA 订阅 TopicA,TopicA 对应 3个队列,则 GroupA 中的 Consumer1 消费的是 MessageQueue 0和 MessageQueue 1的消息,Consumer2是消费的是MessageQueue2的消息。
  • 在广播模式下,同一个 ConsumerGroup 中的每个 Consumer 实例都处理全部的队列。需要注意的是,广播模式下因为每个 Consumer 实例都需要处理全部的消息,因此这种模式仅推荐在通知推送、配置同步类小流量场景使用。


RocketMQ的消息模型(第三阶段)

        Producer、Consumer又是如何找到Topic和Broker的地址呢?消息的具体发送和接收又是怎么进行的呢?

【RocketMQ入门到精通】—


生产级别的消息系统模型

生产者Producer

      发布消息的角色。Producer通过 MQ 的负载均衡模块选择相应的 Broker 集群队列进行消息投递,投递的过程支持快速失败和重试。

消费者Consumer

      消息消费的角色。

  • 支持以推(push),拉(pull)两种模式对消息进行消费。
  • 同时也支持集群方式广播方式的消费。
  • 提供实时消息订阅机制,可以满足大多数用户的需求。

名字服务器 NameServer

NameServer是一个简单的 Topic 路由注册中心,支持 Topic、Broker 的动态注册与发现。

主要包括两个功能:

  • Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;
  • 路由信息管理,每个NameServer将保存关于 Broker 集群的整个路由信息和用于客户端查询的队列信息。Producer和Consumer通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。
NameServer的多实例部署

  NameServer通常会有多个实例部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,客户端仍然可以向其它NameServer获取路由信息。

代理服务器 Broker

  1. Broker主要负责消息的存储、投递和查询以及服务高可用保证。
  2. NameServer几乎无状态节点,因此可集群部署,节点之间无任何信息同步。
  3. Broker部署相对复杂。
  1. 在 Master-Slave 架构中,Broker 分为 Master 与 Slave。一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。Master 与 Slave 的对应关系通过指定相同的BrokerName,不同的BrokerId 来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。
NameServer的通信关系
  • 每个Broker 与 NameServer 集群中的所有节点建立长连接,定时注册 Topic 信息到所有 NameServer。
  • Producer 与 NameServer 集群中的其中一个节点建立长连接,定期从 NameServer 获取Topic路由信息,并向提供 Topic 服务的 Master 建立长连接,且定时向 Master 发送心跳。Producer 完全无状态。
  • Consumer 与 NameServer 集群中的其中一个节点建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Master、Slave 建立长连接,且定时向 Master、Slave发送心跳。Consumer 既可以从 Master 订阅消息,也可以从Slave订阅消息。

rocketmq入门到精通—rocketmq中级特性能力|解释一下顺序消息原理

...【​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​】什么是消息的顺序性消息的顺序性指的是在消息消费时,能按照发送的顺序来消费。例如:针对于商城服务的的下单到付款的流程中,会产生三条... 查看详情

rocketmq入门到精通—rocketmq初级特性能力|messageorder,rocketmq的消息可以是有序的哦

...源​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​订阅与发布消息的发布是指某个生产者向某个topic发送消息,消息的订阅是指某个消费者关注了某个topic中带有某些tag的消息,进而从该topic消费数据... 查看详情

rocketmq入门到精通—rocketmq初级特性能力|messagereliablity,消息可靠性(不能多也不能丢)如何解决?

...【​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​】RocketMQ支持消息的高可靠,影响消息可靠性的几种情况:Broker非正常关闭Broker异常CrashOSCrash机器掉电,但是能立即恢复供电情况机器无法开机(可... 查看详情

rocketmq入门到精通—rocketmq初级特性能力|messagefilter消息过滤,可不是web容器的过滤器哦

...【​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​】什么是消息过滤MessageFilter,可不是web容器的过滤器哦,可以发生在服务端也可以发生在客户端,消息过滤是指消息生产者向Topic中发送消息时,设... 查看详情

(作者推荐)rocketmq入门到精通—rocketmq中级特性能力|​长轮询pull和push模式你选择哪个?为什么?区别在哪里?(含源码分析)「push篇」

...【​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​】RocketMQ消费机制回顾   在众多MQ的体系中,一般消息的流转过程为消息通过生产者发送到某一个主题(topic),对应的订阅该topic的消费... 查看详情

rocketmq入门到精通—rocketmq初级特性能力|messagepersistence,消息中间件通常采用的几种持久化方式,可以存到数据库里面甚至redis里,你知道不?

...【​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​】MessagePersistence,消息中间件通常采用的几种持久化方式,可以存到数据库里面甚至redis里,你知道不?RocketMQ的存储和消费关系RocketMQ是一个队列模... 查看详情

springboot整合rocketmq实现入门案例

此前我们学习了如何在linux安装RocketMQ,以及使用Java程序公网连接的一系列准备工作,并且学习了Spring整合RocketMQ的第一个案例!现在我们来学习SpringBoot如何整合RocketMQ实现更加简单的使用!文章目录1创建maven项目... 查看详情

rocketmq-学习

官网:http://rocketmq.apache.org/入门:http://rocketmq.apache.org/docs/quick-start/gtihub:https://github.com/apache/rocketmq中文文档:https://github.com/apache/rocketmq/tree/master/do 查看详情

八.rocketmq极简入门-在springboot中使用rocketmq(代码片段)

...不得不考虑和SpringBoot集成,本篇文章为SpirngBoot整合RocketMQ案例SpringBoot集成RocketMQ导入依赖这里使用整合RocketMQ的基础依赖:rocketmq-spring-b 查看详情

rocketmq事务消息入门介绍(代码片段)

说明周五的时候发了篇:Rocketmq4.3支持事务啦!!!,趁着周末的时候把相关内容看了下,下面的主要内容就是关于RocketMQ事务相关内容介绍了。说明:今天这篇仅仅是入门介绍,并没有涉及到很多细节,先把大概流程说明白,... 查看详情

rocketmq存储优化技术解析——图解源码级解析(代码片段)

...#x1f34a;Java学习:Java从入门到精通总结🍊深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想🍊绝对不一样的职场干货:大厂最佳实践经验指南📆最近更新:2023年1月13日🍊个人简介:通信工程... 查看详情

rocketmq源码学习-1.入门

为什么读RocketMQ消息队列在互联网应用中使用较为广泛,学习她可以让我门更加了解使用技术的工作原理透过学习她的源码,拓宽认知RocketMQ经历了阿里双十一有哪些名词Producer消息生产者,负责产生消息Consumer消息消费者,负责... 查看详情

rocketmq入门到入土事务消息&顺序消息(代码片段)

接上一篇:RocketMQ入门到入土(一)新手也能看懂的原理和实战!一、事务消息的由来1、案例引用官方的购物案例:小明购买一个100元的东西,账户扣款100元的同时需要保证在下游的积分系统给小明这个账号增加100积分。账号系... 查看详情

rocketmq快速入门

前面几篇文章介绍了为什么选择RocketMQ,以及与kafka的一些对比:阿里RocketMQ优势对比,方便大家对于RocketMQ有一个简单的整体了解,之后介绍了:MQ应用场景,让我们知道MQ在什么时候可以使用,可以解决什么问题,之后介绍了:... 查看详情

七.rocketmq极简入门-rocketmq事务消息(代码片段)

概述如果业务只涉及到一个数据库的写操作,我们只需要保证这一个事物的提交和回滚,这种事务管理叫传统事物或本地事务,如果业务涉及到多个数据库(多个服务)的写操作,我们需要保证多个数据库同时提交... 查看详情

四.rocketmq极简入门-rocketmq顺序消息发送(代码片段)

...消费,队列本身是一种先进先出的数据结构,而RocketMQ理论上说也遵循这种机制。但是默认生产者以RoundRobin轮询方式把消息发送到不同的Queu 查看详情

rocketmq原理学习--索引

 1、RocketMQ原理学习--RocketMQ源码运行 2、RocketMQ原理学习--RocketMQ整体架构窥探 3、RocketMQ原理学习--消息类型 4、RocketMQ原理学习--NameServer 5、RocketMQ原理学习---生产者普通消息发送 6、RocketMQ原理学习---生产者... 查看详情

rocketmq源码学习笔记(代码片段)

一、环境配置1.1、下载源码下载地址:https://github.com/apache/rocketmqgitclonehttps://github.com/apache/rocketmq.git1.2、导入maven工程到IDE1.3、准备启动的配置1)在下载的rocketmq根目录创建新文件夹conf2)把rocketmq\\distribution 查看详情