当前位置: 首页 > news >正文

RabbitMQ的基本使用

RabbitMQ 是一个非常流行的消息中间件,用于实现生产者与消费者之间的异步通信。它基于 AMQP 协议(高级消息队列协议),支持多种编程语言和平台。

以下是 RabbitMQ 的基本使用说明,包括安装、核心概念、基本操作和 Python 的简单示例。

---

一、RabbitMQ 核心概念

在使用 RabbitMQ 之前,理解以下基本概念是非常重要的:

  1. Producer(生产者):
    • 消息的发送方,负责将消息发送到 RabbitMQ。
  2. Queue(队列):
    • 消息的存储位置,RabbitMQ 内部的消息队列,用于存储待处理的消息。
  3. Consumer(消费者):
    • 消息的接收方,从队列中取出消息进行处理。
  4. Exchange(交换机):
    • 生产者发送的消息并不是直接发送到队列,而是先发送到交换机,由交换机根据路由规则将消息分发到队列。
  5. Binding(绑定):
    • 用于将交换机和队列关联起来,并指定路由规则。
  6. Routing Key(路由键):
    • 消息的路由规则,用于决定消息应该被发送到哪个队列。
  7. Acknowledgment(确认):
    • 消费者在处理完消息后,向 RabbitMQ 确认消息已被处理,RabbitMQ 会将其从队列中删除。

二、RabbitMQ 的基本使用

1. 安装 RabbitMQ

RabbitMQ 是基于 Erlang 的,因此需要先安装 Erlang,然后再安装 RabbitMQ。

在 Linux 上安装 RabbitMQ

Language:bash

bash
# 安装 Erlang
sudo apt update
sudo apt install -y erlang# 安装 RabbitMQ
sudo apt install -y rabbitmq-server# 启动 RabbitMQ 服务
sudo systemctl start rabbitmq-server# 检查 RabbitMQ 服务状态
sudo systemctl status rabbitmq-server
在 Windows 上安装 RabbitMQ
  1. 下载并安装 Erlang:Erlang 官方下载页面。
  2. 下载并安装 RabbitMQ:RabbitMQ 官方下载页面。
  3. 安装完成后,启动 RabbitMQ 服务。

2. 启用 RabbitMQ 管理插件

RabbitMQ 提供了一个 Web 管理界面,可以用来管理队列、交换机和消息。

Language:bash

bash
# 启用管理插件
sudo rabbitmq-plugins enable rabbitmq_management# 默认管理界面地址:http://localhost:15672
# 默认用户名和密码:guest / guest

---

三、RabbitMQ 的基本操作

1. 创建用户和虚拟主机

RabbitMQ 使用虚拟主机(Virtual Host)来隔离不同的消息队列。

创建用户

Language:bash

bash
# 添加用户
sudo rabbitmqctl add_user username password# 设置用户权限
sudo rabbitmqctl set_permissions -p / username ".*" ".*" ".*"

创建虚拟主机

Language:bash

bash
# 添加虚拟主机
sudo rabbitmqctl add_vhost my_vhost# 将用户与虚拟主机绑定
sudo rabbitmqctl set_permissions -p my_vhost username ".*" ".*" ".*"

---

四、使用 Python 操作 RabbitMQ

1. 安装依赖

在 Python 中,使用 pika 库与 RabbitMQ 通信。安装方法:

Language:bash
pip install pika

2. 基本生产者和消费者示例

以下是一个简单的生产者和消费者示例:

生产者(Producer)

Language:python

python
import pika# 连接到 RabbitMQ 服务
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()# 声明队列(如果队列不存在,会自动创建)
channel.queue_declare(queue='hello')# 发送消息
message = "Hello RabbitMQ!"
channel.basic_publish(exchange='', routing_key='hello', body=message)print(f" [x] Sent '{message}'")# 关闭连接
connection.close()
消费者(Consumer)

Language:python

python
import pika# 连接到 RabbitMQ 服务
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()# 声明队列(需与生产者的队列名称一致)
channel.queue_declare(queue='hello')# 回调函数,处理接收到的消息
def callback(ch, method, properties, body):print(f" [x] Received {body}")# 订阅队列,注册回调函数
channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()

运行步骤:

  1. 先启动消费者代码,等待消息。
  2. 再启动生产者代码,发送消息。
  3. 消费者会接收到生产者发送的消息,并在控制台打印。

3. 使用交换机(Exchange)和路由键(Routing Key)

RabbitMQ 的交换机类型有以下几种:

  1. Direct:通过路由键将消息发送到指定队列。
  2. Fanout:将消息广播到所有绑定的队列。
  3. Topic:通过模式匹配的路由键将消息发送到队列。
  4. Headers:根据消息头属性路由消息。

以下是使用 Direct 类型交换机的示例:

生产者(使用 Direct 交换机)

Language:python

python
import pika# 连接到 RabbitMQ 服务
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()# 声明交换机
channel.exchange_declare(exchange='direct_logs', exchange_type='direct')# 发送消息
routing_key = 'info'  # 路由键
message = "This is an info message"
channel.basic_publish(exchange='direct_logs', routing_key=routing_key, body=message)print(f" [x] Sent '{message}' with routing key '{routing_key}'")# 关闭连接
connection.close()
消费者(使用 Direct 交换机)

Language:python

python
import pika# 连接到 RabbitMQ 服务
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()# 声明交换机
channel.exchange_declare(exchange='direct_logs', exchange_type='direct')# 创建一个临时队列
result = channel.queue_declare(queue='', exclusive=True)
queue_name = result.method.queue# 绑定队列到交换机,指定路由键
routing_key = 'info'
channel.queue_bind(exchange='direct_logs', queue=queue_name, routing_key=routing_key)print(' [*] Waiting for messages. To exit press CTRL+C')# 回调函数
def callback(ch, method, properties, body):print(f" [x] Received {body}")# 开始消费
channel.basic_consume(queue=queue_name, on_message_callback=callback, auto_ack=True)
channel.start_consuming()

---

五、总结

  1. 基本流程:

    • 生产者发送消息到交换机。
    • 交换机根据路由规则将消息分发到队列。
    • 消费者从队列中取出消息进行处理。
  2. 常用工具:

    • pika 是 Python 操作 RabbitMQ 的标准库。
    • RabbitMQ 管理界面(http://localhost:15672)可以用于监控队列和交换机。
  3. RabbitMQ 的高级功能:

    • 消息持久化(Durable Queues)。
    • 消息确认(Acknowledge)。
    • 死信队列(Dead Letter Queue)。
    • 优先级队列(Priority Queues)。

希望这份指南能帮你快速上手 RabbitMQ!如果还有其他问题,可以随时提问。

相关文章:

  • 力扣-盛最多水的容器
  • 文件包含靶场实现
  • RK3576 Android 14.0 SDK开发指南(第一集)
  • vivado fpga程序固化
  • FPGA:基于Vivado的仿真流程与波形调试实践
  • 企业级网络安全护盾:剖析高防IP原理与防护策略
  • C# 语法篇:字段的定义和运算
  • 基于R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析技术
  • Python实现VTK - 自学笔记(4):用Widgets实现三维交互控制
  • 已解决:Git冲突完全解决指南(附最佳实践)
  • 第三个小程序动工:一款结合ai的菜谱小程序
  • 软考中级软件设计师——计算机网络篇
  • 国产远程工具如何重新定义高效连接?——从协议支持到生态整合的全面解析
  • SPA模式下的es6如何加快宿主页的显示速度
  • Index-AniSora技术升级开源:动漫视频生成强化学习
  • 深入解析FramePack:高效视频帧打包技术原理与实践
  • 什么叫生成式人工智能?职业技能的范式转移与能力重构
  • C++:迭代器
  • c/c++的opencv高斯模糊
  • 超长文本注意力机制如何突破传统 O(n²) 瓶颈
  • 破局之路,阳光保险何以向“新”而行
  • 总数再更新!我国新增三项全球重要农业文化遗产
  • 围绕“工程智能”系统布局,同济大学官宣成立五大研究院
  • 江苏省人民检察院副检察长丁海涛调任省委政法委副书记
  • 学人、学术、学科、学脉:新时代沾溉下的中国西方史学史
  • 贯彻落实《生态环境保护督察工作条例》,充分发挥生态环境保护督察利剑作用