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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
消息中间件 存储 JSON
从兔子说起:深入理解RabbitMQ基础概念【RabbitMQ 一】
从兔子说起:深入理解RabbitMQ基础概念【RabbitMQ 一】
33 0
|
4月前
|
消息中间件 缓存 运维
java消息队列基础和RabbitMQ相关概念(二)
java消息队列基础和RabbitMQ相关概念
53 0
|
4月前
|
消息中间件 存储 Java
java消息队列基础和RabbitMQ相关概念(一)
java消息队列基础和RabbitMQ相关概念
46 0
|
4月前
|
消息中间件 存储 负载均衡
RocketMQ基本概念
RocketMQ基本概念
37 0
|
5月前
|
消息中间件 存储 Kafka
三分钟白话RocketMQ系列—— 核心概念
三分钟白话RocketMQ系列—— 核心概念
|
6月前
|
消息中间件 存储 Kafka
3分钟白话RocketMQ系列—— 核心概念
3分钟白话RocketMQ系列—— 核心概念
106 1
|
7月前
|
消息中间件 存储 监控
RocketMQ 的基本概念、架构设计、特点以及适用场景
RocketMQ 的基本概念、架构设计、特点以及适用场景
524 0
RocketMQ 的基本概念、架构设计、特点以及适用场景
|
8月前
|
消息中间件 存储 Kafka
RocketMQ基本概念及功能
RocketMQ是阿里巴巴在2012年开发的分布式消息中间件,专为万亿级超大规模的消息处理而设计,具有高吞吐量、低延迟、海量堆积、顺序收发等特点。
180 0
|
8月前
|
消息中间件 RocketMQ
RocketMQ核心概念
RocketMQ核心概念
54 0
|
10月前
|
消息中间件 存储 负载均衡
分布式消息队列RocketMQ概念详解
分布式消息队列RocketMQ概念详解
138 1

热门文章

最新文章