rabbitMQ架构
时间: 2025-02-10 08:07:21 浏览: 34
### RabbitMQ 架构详解
#### 1. 核心概念
RabbitMQ 是一款使用 Erlang 语言开发的、实现了高级消息队列协议(AMQP)的开源消息中间件[^2]。其核心功能在于通过可靠的消息传递机制连接分布式应用程序和服务。
#### 2. 主要组件
- **Broker**: 消息代理,负责接收生产者发送的消息并将其转发给消费者。
- **Exchange (交换机)**: 接收来自生产者的消息并将这些消息路由到一个或多个绑定的队列中。常见的 Exchange 类型有 Direct, Fanout, Topic 和 Headers。
- **Queue (队列)**: 存储消息直到被消费为止。为了提高可靠性,RabbitMQ 支持消息持久化和镜像队列,确保即使服务器重启也不会丢失重要数据[^1]。
- **Binding (绑定)**: 将特定条件下的 exchange 输出端口与 queue 输入端口相连的过程称为 binding;它定义了如何以及何时应该把一条消息放入某个具体的队列里去。
- **Producer (生产者/发布者)**: 发送消息至 broker 的应用实体。
- **Consumer (消费者/订阅者)**: 从 broker 获取消息的应用程序实例。
#### 3. 工作流程概述
当 Producer 向 Broker 中的一个指定 Exchange 发布了一条新消息之后:
1. 如果该 Exchange 被配置成能够识别这条消息的目标 Queue,则会立即将此消息复制一份存入相应的 Queue;
2. Consumer 可以监听自己感兴趣的 Queue 并从中取出待处理的任务来执行;
3. 对于那些设置了 TTL 或死信策略的消息,在满足一定条件下会被自动移除或者转移到其他地方继续流转。
#### 4. 高可用特性
对于需要更高稳定性和容错能力的企业级应用场景来说,RabbitMQ 提供了一系列增强版的功能选项,比如 Cluster Mode 下多节点间的同步复制操作可以有效防止单点故障的发生,而 Message Persistence 则允许系统在网络中断期间保存未完成传输的数据直至恢复正常服务状态。
```python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# 声明queue
channel.queue_declare(queue='hello')
def callback(ch, method, properties, body):
print(f"Received {body}")
channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
print('Waiting for messages.')
channel.start_consuming()
```
阅读全文
相关推荐















