RabbitMQ的一些基本概念

RabbitMQ

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

image

AMQP核心概念

Publisher:生产者,向交换机发布消息的主体

Broker:消息队列服务器实体,又称server

Connection:引用程序与Broker的网络连接

Channel:通道,MQ与外部打交道都是通过Channel来的,发布消息、订阅队列还是接收消息,这些动作都是通过Channel完成;简单来说就是消息通过Channel塞进队列或者流出队列

Message:消息,包含消息头(即附属的配置信息)和消息体(即消息的实体内容)

Virtual Host: 虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 /

Exchange:交换机,用来接收生产者发送的消息并将这些消息路由给服务器中的队列

Binding:绑定,用于给Exchange和Queue建立关系

Routing key:一个路由规则,虚拟机可以用它来确定如何路由一个特定消息

Queue:消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。

Consumer:消费者,从消息队列中获取消息的主体

Exchange 类型

1、fanout

fanout类型的Exchange路由规则非常简单,它会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中。

2、direct

direct类型的Exchange路由规则也很简单,它会把消息路由到那些binding key与routing key完全匹配的Queue中

3、topic

前面提到的direct规则是严格意义上的匹配,换言之Routing Key必须与Binding Key相匹配的时候才将消息传送给Queue,那么topic这个规则就是模糊匹配,可以通过通配符满足一部分规则就可以传送。它的约定是:

routing key为一个句点号“. ”分隔的字符串(我们将被句点号“. ”分隔开的每一段独立的字符串称为一个单词),如“stock.usd.nyse”、“nyse.vmw”、“quick.orange.rabbit”
binding key与routing key一样也是句点号“. ”分隔的字符串

binding key中可以存在两种特殊字符“*”与“#”,用于做模糊匹配,其中“*”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)

4、headers

headers类型的Exchange不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。
在绑定Queue与Exchange时指定一组键值对;当消息发送到Exchange时,RabbitMQ会取到该消息的headers(也是一个键值对的形式),对比其中的键值对是否完全匹配Queue与Exchange绑定时指定的键值对;如果完全匹配则消息会路由到该Queue,否则不会路由到该Queue。

### RabbitMQ基本概念介绍 RabbitMQ 是一款流行的开源消息队列中间件,实现了高级消息队列协议(AMQP)[^1]。它使用 Erlang 语言编写,具备高可用性、可扩展性和易用性等特点,广泛应用于各种分布式系统中。 #### 1. 消息中间件的定义 消息中间件是一种应用程序之间的通信方法,用于在分布式系统中存储和转发消息。RabbitMQ 作为一种消息中间件,支持多种客户端语言,如 Python、Ruby、Java、.NET 等,并且支持 AJAX 和其他协议,例如 XMPP 和 STOMP[^3]。 #### 2. RabbitMQ 的基本结构 RabbitMQ 的基本结构包括以下几个关键组件: - **生产者(Producer)**:负责创建和发送消息到 RabbitMQ 服务器。 - **消费者(Consumer)**:从队列中接收和处理消息。 - **消息(Message)**:生产者发送的数据内容。 - **队列(Queue)**:用于存储消息的缓冲区,是消息的容器。 - **交换机(Exchange)**:根据路由规则将消息分发到一个或多个队列中。 - **绑定(Binding)**:定义交换机和队列之间的关系,包含路由键等信息[^5]。 #### 3. 工作原理 RabbitMQ 的工作流程可以概括为以下过程: - 生产者将消息发送到交换机。 - 交换机根据绑定规则和路由键,将消息分发到一个或多个队列。 - 消费者从队列中获取消息并进行处理[^3]。 #### 4. 特性与优势 RabbitMQ 凭借其高可靠、易扩展、高可用及丰富的功能特性,在互联网行业和传统行业中得到了广泛应用。以下是 RabbitMQ 的一些主要特性: - **高可靠性**:通过消息确认机制确保消息不会丢失。 - **高可用性**:支持集群部署,提供故障转移能力。 - **灵活的路由**:支持多种类型的交换机,如 Direct、Fanout、Topic 和 Headers。 - **多协议支持**:除了 AMQP,还支持 STOMP、MQTT 等协议[^3]。 #### 5. 配置示例 以下是一个简单的 RabbitMQ 配置代码示例,展示如何创建一个 RabbitTemplate 实例: ```java @Bean @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { RabbitTemplate template = new RabbitTemplate(connectionFactory); return template; } ``` 此代码片段展示了如何通过 Spring 框架配置 RabbitMQ 的连接工厂和模板对象[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值