RabbitMQ基础概念

简介: RabbitMQ基础概念

RabbitMQ介绍

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

AMQP协议

AMQ(高级消息队列协议)是一种消息传递协议,它使符合要求的客户端应用程序能够与符合要求的消息传递中间件代理进行通信。
消息代理从发布者(发布消息的应用程序,也称为生产者)接收消息,并将其路由到消费者(处理消息的应用)。由于它是一个网络协议,发布者、消费者和代理都可以驻留在不同的机器上。

在这里插入图片描述

Erlang语言

Erlang是一种通用的面向并发的编程语言,可以充分发挥CPU的性能,相对于其他MQ(Kafka、RocketMQ)延迟是最低的。

架构模型

在这里插入图片描述

Publisher 发布者

Publisher为发送消息的程序,发布消息时发布者可以指定各种消息属性(消息元数据)。在发布消息时通常会遇到一下问题:

  • 网络不可靠时可能无法确定消息是否发送成功,AMQP具有重试、confirm、return机制保证消息发送成功。
  • 在某些情况下,例如,当消息无法路由时,消息可能会返回给发布者、丢弃,或者如果代理实现了扩展,则将其放入所谓的“死信队列”。

Connection 连接器

AMQP是一种应用程序级协议,它使用TCP进行可靠传输。

Channel 通道

一些应用程序需要多个连接到代理上,然而,同时保持多个TCP连接打开是不可取的,因为这样做会消耗系统资源并使配置防火墙更加困难。AMQP连接可以被认为是“共享单个TCP连接的轻量级连接”的信道复用。通道只存在于连接的上下文中,而不单独存在,当一个连接关闭时,它上的所有通道都会关闭。对于使用多个线程/进程进行处理的应用程序,很常见的做法是为每个线程/进程打开一个新通道,而不在它们之间共享通道。

Virtual Host 虚拟主机

为了能够托管多个隔离的“环境”(用户组、交换机、队列等),AMQP包含虚拟主机(vhosts)的概念。它们类似于许多流行Web服务器使用的虚拟主机,并提供AMQP实体所在的完全隔离的环境。客户端指定在连接期间要使用的vhost。

Exchange 交换机

交换机接收消息并将其路由到零个或多个队列中。使用的路由算法取决于交换类型和绑定的规则。AMQP提供四种交换机类型:

  • Direct exchange:直接交换根据消息路由向队列传递消息。直接交换是消息单播路由的理想选择(尽管它们也可以用于多播路由)。
    在这里插入图片描述

  • Fanout exchange:广播交换将消息路由到绑定到它的所有队列,并忽略路由密。如果N个队列绑定到广播交换机,则当向该交换机发布新消息时,该消息将传递给所有N个队列。

在这里插入图片描述

  • Topic exchange:主题交换基于消息路由和用于将队列绑定到交换的模式之间的匹配,将消息路由到一个或多个队列。主题交换类型通常用于实现各种发布/订阅模式变体。
    在这里插入图片描述

Binding 绑定

绑定是交换用来将消息路由到队列的规则。为了指示交换机E将消息路由到队列Q,Q必须绑定到E。

Consumer 消费者

在队列中存储消息是无用的,除非消费者可以使用它们。在AMQP模型中,消费者有两种方法可以做到这一点:

  • 订阅并向他们发送消息。这是推荐选项
  • 轮询(“拉API”):这种方式效率很低,在大多数情况下应该避免

同时消费者可以对消息做一下处理:

  • 确认消息:AMQP为消费者提供了两种确认方式手动和自动。当消息被确认消费后代理应该从队列中删除消息。
  • 拒绝消息:当消费者应用程序接收到消息时,该消息的处理可能会成功,也可能不会成功。消费者可以通过拒绝消息来向代理指示消息处理失败。当拒绝消息时,应用程序可以要求放弃或重新排队。
  • 否认消息:与拒绝消息类似,不同的是拒绝消息无法拒绝多条消息,针对此情况AMQP提供否认消息方案。
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
3月前
|
消息中间件 中间件 数据安全/隐私保护
RabbitMQ 的核心概念
RabbitMQ 的核心概念
27 2
|
1天前
|
消息中间件 存储 网络协议
消息中间件RabbitMQ---概述和概念 【一】
该文章提供了对消息中间件RabbitMQ的全面概述,包括其核心概念、工作原理以及与AMQP和JMS的关系。
消息中间件RabbitMQ---概述和概念 【一】
|
1月前
|
消息中间件 负载均衡 算法
【RocketMQ系列十二】RocketMQ集群核心概念之主从复制&生产者负载均衡策略&消费者负载均衡策略
【RocketMQ系列十二】RocketMQ集群核心概念之主从复制&生产者负载均衡策略&消费者负载均衡策略
49 2
|
1月前
|
消息中间件 NoSQL 关系型数据库
【RocketMQ系列十三】RocketMQ的集群核心概念之消费重试&死信队列&幂等消息的出现以及处理
【RocketMQ系列十三】RocketMQ的集群核心概念之消费重试&死信队列&幂等消息的出现以及处理
43 1
|
1月前
|
消息中间件 存储 RocketMQ
【RocketMQ系列十】RocketMQ的核心概念说明
【RocketMQ系列十】RocketMQ的核心概念说明
28 1
|
2月前
|
消息中间件 存储 物联网
RocketMQ基础概念
RocketMQ基础概念
34 1
|
3月前
|
消息中间件 存储 Apache
RocketMQ实战教程之常见概念和模型
Apache RocketMQ 实战教程介绍了其核心概念和模型。消息是基本的数据传输单元,主题是消息的分类容器,支持字节、数字和短划线命名,最长64个字符。消息类型包括普通、顺序、事务和定时/延时消息。消息队列是实际存储和传输消息的容器,是主题的分区。消费者分组是一组行为一致的消费者的逻辑集合,也有命名限制。此外,文档还提到了一些使用约束和建议,如主题和消费者组名的命名规则,消息大小限制,请求超时时间等。RocketMQ 提供了多种消息模型,包括发布/订阅模型,有助于理解和优化消息处理。
|
2月前
|
消息中间件 存储 中间件
【主流技术】聊一聊消息队列 RocketMQ 的基本结构与概念
2.6Broker 代理服务器(Broker)是消息中转角色,负责存储消息、转发消息。代理服务器在 RocketMQ 系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。代理服务器也存储消息相关的元数据,包括消费者组、消费进度偏移和主题和队列消息等。 2.7Pull Consumer 拉取式消费(Pull Consumer)是 Consumer 消费的一种类型,也是默认的类型。下游应用系统通常主动调用 Consumer 的拉消息方法从 Broke r服务器拉消息,即主动权由下游应用控制。一旦获取了批量消息,应用就会启动消费过程。
|
3月前
|
消息中间件 Java API
RabbitMQ(基础概念, 简单使用)(下)
RabbitMQ(基础概念, 简单使用)
37 0
|
3月前
|
消息中间件 存储 Java
RabbitMQ(基础概念, 简单使用)(中)
RabbitMQ(基础概念, 简单使用)
19 0