首页 > 其他分享 >RocketMQ

RocketMQ

时间:2024-01-26 10:12:14浏览次数:27  
标签:存储 调用 队列 消息 Apache RocketMQ

领域模型

https://rocketmq.apache.org/zh/docs/domainModel/01main/

概述

Apache RocketMQ 是一款典型的分布式架构下的中间件产品,使用异步通信方式发布订阅的消息传输模型。

通信方式和传输模型的具体说明,请参见下文通信方式介绍和消息传输模型介绍。

Apache RocketMQ 产品具备异步通信的优势,系统拓扑简单、上下游耦合较弱;

主要应用于异步解耦,流量削峰填谷等场景。

Apache RocketMQ 中消息的生命周期主要分为消息生产、消息存储、消息消费这三部分:

  生产者生产消息并发送至 Apache RocketMQ 服务端,消息被存储在服务端的主题中,消费者通过订阅主题消费消息;

 

通信方式介绍

分布式系统架构思想下,将复杂系统拆分为多个独立的子模块,例如微服务模块。

此时就需要考虑子模块间的远程通信,典型的通信模式分为以下两种,一种是同步的RPC远程调用;一种是基于中间件代理的异步通信方式

 

 

同步RPC调用模型下,不同系统之间直接进行调用通信,每个请求直接从调用方发送到被调用方,然后要求被调用方立即返回响应结果给调用方,以确定本次调用结果是否成功。

  注意 此处的同步并不代表RPC的编程接口方式,RPC也可以有异步非阻塞调用的编程方式,但本质上仍然是需要在指定时间内得到目标端的直接响应。

 

异步消息通信模式下,各子系统之间无需强耦合直接连接调用方只需要将请求转化成异步事件(消息)发送给中间代理,发送成功即可认为该异步链路调用完成,剩下的工作中间代理会负责将事件可靠通知到下游的调用系统,确保任务执行完成。

该中间代理一般就是消息中间件

 

异步通信的优势如下:

  • 系统拓扑简单。由于调用方和被调用方统一和中间代理通信,系统是星型结构,易于维护和管理。
  • 上下游耦合性弱。上下游系统之间弱耦合,结构更灵活,由中间代理负责缓冲和异步恢复。 上下游系统间可以独立升级和变更,不会互相影响。
  • 容量削峰填谷。基于消息的中间代理往往具备很强的流量缓冲和整形能力,业务流量高峰到来时不会击垮下游。

 

消息传输模型

主流的消息中间件的传输模型主要为点对点模型发布订阅模型

 

Topic

https://rocketmq.apache.org/zh/docs/domainModel/02topic/

定义

主题是 Apache RocketMQ 中消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息;

模型关系

主题是 Apache RocketMQ 的顶层存储,所有消息资源的定义都在主题内部完成,但主题是一个逻辑概念,并不是实际的消息容器。

主题内部由多个队列组成,消息的存储和水平扩展能力最终是由队列实现的;并且针对主题的所有约束和属性设置,最终也是通过主题内部的队列来实现。

 

队列 

https://rocketmq.apache.org/zh/docs/domainModel/03messagequeue/

定义

队列是 Apache RocketMQ 中消息存储和传输实际容器,也是 Apache RocketMQ 消息的最小存储单元

Apache RocketMQ 的所有主题都是由多个队列组成,以此实现队列数量的水平拆分和队列内部的流式存储;

 

队列的主要作用如下:

  • 存储顺序性

    队列天然具备顺序性,即消息按照进入队列的顺序写入存储,同一队列间的消息天然存在顺序关系,队列头部为最早写入的消息,队列尾部为最新写入的消息。消息在队列中的位置和消息之间的顺序通过位点(Offset)进行标记管理;

  • 流式操作语义

    Apache RocketMQ 基于队列的存储模型可确保 消息从任意位点读取任意数量的消息,以此实现类似聚合读取、回溯读取等特性,这些特性是RabbitMQ、ActiveMQ等非队列存储模型不具备的。

 

模型关系

Apache RocketMQ 默认提供消息可靠存储机制,所有发送成功的消息都被持久化存储到队列中,配合生产者和消费者客户端的调用可实现至少投递一次的可靠性语义。

在 Apache RocketMQ 消息收发模型中,队列属于主题的一部分,虽然所有的消息资源以主题粒度管理,但实际的操作实现是面向队列

  例如,生产者指定某个主题,向主题内发送消息,但实际消息发送到该主题下的某个队列中

Apache RocketMQ 中通过修改队列数量,以此实现横向的水平扩容和缩容

 

消息

https://rocketmq.apache.org/zh/docs/domainModel/04message/

定义

消息是 Apache RocketMQ 中的最小数据传输单元

生产者将业务数据的负载和拓展属性包装成消息发送到 Apache RocketMQ 服务端,服务端按照相关语义将消息投递到消费端进行消费。

 

Apache RocketMQ 的消息模型具备如下特点:

  • 消息不可变性

    消息本质上是已经产生并确定的事件,一旦产生后,消息的内容不会发生改变。即使经过传输链路的控制也不会发生变化,消费端获取的消息都是只读消息视图

  • 消息持久化

    Apache RocketMQ 会默认对消息进行持久化,即将接收到的消息存储到 Apache RocketMQ 服务端的存储文件中,保证消息的可回溯性和系统故障场景下的可恢复性。

 

生产者

https://rocketmq.apache.org/zh/docs/domainModel/04producer/

定义

生产者和主题的关系为多对多关系,即同一个生产者可以向多个主题发送消息,对于平台类场景如果需要发送消息到多个主题,并不需要创建多个生产者;

同一个主题也可以接收多个生产者的消息,以此可以实现生产者性能的水平扩展和容灾。

内部属性

消息发送重试

  https://rocketmq.apache.org/zh/docs/featureBehavior/05sendretrypolicy/

 

消费者分组(ConsumerGroup)

https://rocketmq.apache.org/zh/docs/domainModel/07consumergroup/

定义

消费者分组是 Apache RocketMQ 系统中 承载多个消费行为一致的消费者负载均衡分组

和消费者不同,消费者分组并不是运行实体,而是一个逻辑资源

在 Apache RocketMQ 中,通过消费者分组内初始化多个消费者实现 消费性能水平扩展以及高可用容灾

 

在消费者分组中,统一定义以下消费行为,同一分组下的多个消费者 将按照分组内 统一的消费行为和负载均衡策略消费消息

  • 订阅关系:Apache RocketMQ 以消费者分组的粒度 管理订阅关系,实现订阅关系的管理和追溯。具体信息,请参见订阅关系(Subscription)

  • 投递顺序性:Apache RocketMQ 的服务端将消息投递给消费者消费时,支持顺序投递和并发投递,投递方式在消费者分组中统一配置。具体信息,请参见顺序消息

  • 消费重试策略: 消费者消费消息失败时的重试策略,包括重试次数、死信队列设置等。具体信息,请参见消费重试

https://rocketmq.apache.org/zh/docs/featureBehavior/10consumerretrypolicy/

 

消费者(Consumer)

https://rocketmq.apache.org/zh/docs/domainModel/08consumer/

消费者分类

https://rocketmq.apache.org/zh/docs/featureBehavior/06consumertype/

标签:存储,调用,队列,消息,Apache,RocketMQ
From: https://www.cnblogs.com/anpeiyong/p/17988716

相关文章

  • rocketmq--push、poll、simple模型的区别
    RocketMQ提供了几种不同类型的消费者,以满足不同使用场景的需求。以下是RocketMQ中三种主要消费者类型的原理和区别:PushConsumer(推模式消费者)原理:PushConsumer是一种被动接收消息的消费者。Broker(消息服务器)将消息推送给消费者,消费者监听指定的Topic和Tag。当消息到达时,Broker......
  • rocketmq--死信队列
    在RocketMQ中,死信队列(DeadLetterQueue,DLQ)用于存放无法成功消费的消息。当消息重试消费次数超过设定的阈值后,消息将被转移到死信队列。使用SpringBoot集成RocketMQ时,可以通过以下步骤来处理死信队列中的消息。首先,在pom.xml中添加RocketMQSpringBootStarter的依赖:<dependen......
  • rocketmq--同步、异步、批量、事务消息demo
    在SpringBoot中使用RocketMQ进行同步和异步消息传输的关键是使用RocketMQTemplate类。下面是两个例子,分别演示了如何实现同步和异步消息传输。首先,确保你已经添加了RocketMQ的依赖到你的pom.xml中,如下所示:<dependency><groupId>org.apache.rocketmq</groupId><artifa......
  • rocketmq--消息顺序消费demo
    在RocketMQ中,要实现消息的顺序消费,你需要确保以下几点:发送消息时,相同业务顺序的消息应该发送到同一个队列(MessageQueue)。消费者在消费时,应该使用顺序消费的方式。下面是一个使用SpringBoot和RocketMQ实现消息顺序消费的例子。添加依赖(pom.xml):<dependencies><de......
  • rocketmq--中的7种消息类型
    RocketMQ支持多种消息类型,每种类型都适用于不同的业务场景。下面是一些常见的消息类型及其特点:普通消息(NormalMessage):这是最基本的消息类型,没有任何特殊属性。生产者发送消息到指定的主题,消费者从主题订阅并消费这些消息。普通消息不保证严格的顺序。顺序消息(OrderedM......
  • rocketmq--有哪些关键名词
    RocketMQ是一个开源的分布式消息中间件,它具有高性能、高吞吐量、可扩展性和可靠性等特点。在使用RocketMQ时,你会遇到以下几个关键概念:NameServer(名称服务):NameServer是RocketMQ的注册中心,负责维护所有Broker的路由信息,供生产者和消费者查询。生产者和消费者启动时,需要连接到Nam......
  • rocketmq--两种消息模型的区别及demo
    RocketMQ主要支持两种消息模型:集群消费(Clustering)和广播消费(Broadcasting)。集群消费(Clustering):在集群消费模式下,同一个消费者组(ConsumerGroup)中的消费者实例平均分摊消费消息,即一个消息只会被消费者组中的一个消费者消费一次。这种模式适用于负载均衡场景,可以提高消费的并......
  • rocketmq--如何做路由发现、注册、剔除的
    RocketMQ的NameServer是一个轻量级的服务,负责维护关于Broker的路由信息和提供路由查询服务。以下是NameServer在Broker管理、路由发现、路由注册和路由剔除方面的工作机制:Broker管理:Broker在启动时会向所有的NameServer发送注册请求,包含自己的地址、存储的队列......
  • rocketmq--基础配置
    Springboot项目application.properties的基础配置server.port=8091#RocketMQNameServer地址rocketmq.name-server=公网IP:9876#生产者组名称rocketmq.producer.group=my-rocket-mq-grouprocketmq.producer.access-key=rocketmq2rocketmq.producer.secret-key=123456......
  • spring--集成RocketMQ
    在SpringBoot中集成RocketMQ通常涉及以下步骤:添加依赖:首先,需要在项目的pom.xml文件中添加RocketMQ的SpringBootStarter依赖。<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>......