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

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!如果还有其他问题,可以随时提问。

http://www.xdnf.cn/news/7539.html

相关文章:

  • SSL证书:谷歌算法排名的安全基石与信任杠杆
  • 【小明剑魔视频Viggle AI模仿的核心算法组成】
  • Wan2.1 通过首尾帧生成视频
  • 【综述】视频目标分割VOS
  • 【DICOM之加密传输】DICOM实现TLS加密传输的一些经验
  • 二、【环境搭建篇】:Django 和 Vue3 开发环境准备
  • Spark离线数据处理实例
  • 20250520在全志H3平台的Nano Pi NEO CORE开发板上运行Ubuntu Core16.04.3时跑通4G模块EC20
  • 大模型——多模态检索的RAG系统架构设计
  • CentOS系统上挂载磁盘
  • 【图像大模型】Stable Diffusion 3 Medium:多模态扩散模型的技术突破与实践指南
  • CentOS Stream安装MinIO教程
  • 算力:数智时代的核心生产力引擎​
  • idea 插件开发自动发布到 nexus 私服中(脚本实例)
  • 界面控件DevExpress WinForms v24.2——PDF Viewer功能升级
  • Visual Studio 2019/2022:当前不会命中断点,还没有为该文档加载任何符号。
  • 基于海绵结构的密码杂凑算法Master
  • 云原生主要架构模式
  • C++(4)if的终极使用 +三目运算符
  • Java 08集合
  • 网络安全之网络攻击spring临时文件利用
  • 2024年热门AI趋势及回顾
  • CPQ报价系统多层战略,加快企业销售周期
  • 利用Spring Boot和Redis构建高性能缓存系统
  • List优雅分组
  • 开源CMS系统中哪些常见的安全漏洞最需要注意?
  • AWS CodePipeline+ Elastic Beanstalk(AWS中国云CI/CD)
  • HCIP实验五
  • MyBatis实战指南(一)MyBatis入门基础与利用IDEA从零开始搭建你的第一个MyBatis系统
  • linux关闭某端口暂用的进程