消息中间件:RocketMQ详讲 您所在的位置:网站首页 rocketmq组和主题 消息中间件:RocketMQ详讲

消息中间件:RocketMQ详讲

2023-12-03 21:58| 来源: 网络整理| 查看: 265

消息中间件,一般也称为「消息队列」,主要的优点如下: 1、异步 2、解耦 3、削峰 关于上述三点的详细解释可以参考消息队列扫盲(RocketMQ 入门)

Apache RocketMQ 模型

在这里插入图片描述 Apache RocketMQ消息的生命周期包括三个阶段:生产、存储和消费。 生产者生成一条消息并将其发送到Apache RocketMQ代理。消息存储在代理的主题中。消费者订阅主题以使用消息。消息模型的特征是:

不可变性:消息生成后,消息的内容不会发生变化。即使消息通过传输通道,消息的内容也保持不变。消费者获得的消息是只读消息。持久性:默认情况下,Apache RocketMQ持久化消息。接收到的消息存储在Apache RocketMQ代理的存储文件中,以确保在发生系统故障时可以跟踪和恢复消息。

生产者: 用于在Apache RocketMQ中生成消息的实体。生产者是业务呼叫链接的上游部分。生产者是轻量级的、匿名的,并且没有身份。 生产者和主题有n到n的关系。一个生产者可以向多个主题发送消息,而一个主题可以从多个生产者接收消息。这种多对多关系促进了性能伸缩和灾难恢复。

主题: 在Apache RocketMQ中用于消息传输和存储的分组容器。主题是定义所有消息资源的顶级存储容器。主题是一个逻辑概念,而不是存储消息的实际单元。 使用限制:

一个主题可以包含一个或多个队列,但至少包含一个队列,使用者可以在创建主题时指定队列的数量,建议配置少量的队列,并避免添加不需要的队列。一个主题只能指定一种消息类型

消费者组: 在Apache RocketMQ的发布/订阅模型中定义的一组独立的消费身份。消费者组用于集中管理运行在底层的使用者。同一组中的使用者必须彼此保持相同的消费逻辑和配置,并共同消费该组订阅的消息,以扩展该组的消费能力。 消费者: 用于在Apache RocketMQ中使用消息的实体。消费者是业务调用链接的下游部分,消费者必须属于特定的消费群体。

传输模型:点到点模型、发布/订阅模型

消息中间件服务有两种常见的传输模型:点到点模型 和 发布/订阅模型。

点对点模型: 在这里插入图片描述 点到点模型,也称为队列模型,具有以下特征:

使用者匿名性:队列是上下游通信过程中使用的唯一标识。下游使用者在从队列获取消息时不能声明标识。一对一的通信:消费者没有身份。一个消费组中的所有消费者一起消费订阅的消息。每条消息只能由一个特定的使用者使用。因此,该模型只支持一对一的通信。 发布/订阅模型:

在这里插入图片描述 该模型具有以下特点:

独立消费:在这个模型中,消费者使用消费组的标识(或订阅)来接收和消费消息。消费群体是相互独立的。一对多通信:基于独立身份的设计,该模型允许多个消费者组订阅一个主题,每个消费者组对所有消息具有完全访问权。因此,发布/订阅模型支持一对多通信。 注意:这里的“多”指的是多个消费者组。而一个消费者组会有多个消费者,那么一个消费者组拿到的消息要如何分配给消费者呢?有两种模式:集群模式、广播模式 广播模式 消息会被发给消费者组中的每一个消费者进行消费。消息以一对多的关系从主题传递给多个订阅者。 该模式通常用于网关推送、配置推送等场景。集群模式 一个消费者组共同消费一个主题的多个队列,一个队列只会被一个消费者消费,如果某个消费者挂掉了,分组内的其他消费者会接替挂掉的消费者继续消费。该模式适用于微服务解耦。在这里插入图片描述

在使用广播消费的场景中,不需要负载均衡,因为每个消费组只包含一个消费者。 但是,在使用集群消费的场景中,每个消费组包含多个消费者。负载均衡策略可以帮助确定如何分配消息。 根据使用者类型的不同,负载均衡策略可分为以下两种类型:

基于消息的负载平衡:推送使用者和简单使用者的默认策略。 消息被均匀地分配给消费者组中的多个消费者。基于消息的负载平衡确保队列中的消息可以由多个消费者并发处理。但是,消息是随机发送给消费者的,这意味着不能指定如何将消息分配给消费者。 基于消息的负载平衡基于主题中单个消息的确认语义。在消费者接收到消息后,代理锁定该消息,以确保它对其他消费者是不可见的,直到它被使用或超时。这可以防止同一队列的消息被不同的使用者多次使用。 场景:由于队列中的消息被离散地分配给消费者,基于消息的负载平衡适用于大多数在线事件处理场景。

在这里插入图片描述

基于队列的负载平衡:拉式消费者的默认策略。 在基于队列的负载均衡策略中,同一消费者组中的消费者使用分配给他们的队列中的消息。每个队列由一个消费者使用。基于队列的负载均衡根据运行数据(如队列数量和消费者数量)分配消息。每个队列都绑定到特定的使用者。 场景:基于队列的负载均衡适用于希望处理聚合消息或批量消息的场景。这些都是流计算和数据聚合应用程序中的常见场景。 在这里插入图片描述 消费者偏移量 - Consumer Offset

Apache RocketMQ遵循发布/订阅模式。多个消费者组可以订阅同一个队列。在这样的场景中,当消费者在消费消息后删除消息时,其他消费者将无法使用它。

为了防止这种情况发生,Apache RocketMQ使用消费者偏移量来管理不同消费者的消息消费进度。Apache RocketMQ不会在消费消息后立即删除消息。相反,Apache RocketMQ维护消费者组所使用的最新消息的记录,这也称为消费者偏移量。

在客户机重新启动的情况下,消费者能够基于保存在服务器中的消费者偏移量继续处理消息。如果消费者偏移量过期并被删除,则使用保存在服务器中的队列的MinOffset值(即有效队头数据)作为消费者偏移量。 在这里插入图片描述

概念:订阅

不同于发布/订阅模型的概念,订阅是使用者在Apache RocketMQ中获取和处理消息的规则和状态设置。 Apache RocketMQ的订阅是基于消费者组和主题设计的。因此,订阅是指定消费组对主题的订阅。 一个主题到多个订阅者如下图: MessageTag是一个细粒度的消息分类属性,它允许将消息细分到主题级别以下。使用者通过订阅特定标记实现消息过滤。 在这里插入图片描述 一个订阅者订阅多个主题如下图: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有