RabbitMQ从入门到精通:解锁消息队列的神秘力量

目录

一、引言:RabbitMQ 是什么?

二、RabbitMQ 初相识

(一)RabbitMQ 的作用

(二)RabbitMQ 的应用场景

三、安装 RabbitMQ,开启学习之旅

(一)安装前的准备

(二)正式安装 RabbitMQ

(三)验证安装

四、深入理解 RabbitMQ 核心概念

(一)生产者与消费者

(二)交换机(Exchange)

(三)队列(Queue)

(四)绑定(Binding)

(五)消息(Message)

五、RabbitMQ 工作模式详解

(一)简单模式(Hello World)

(二)工作队列模式(Work Queues)

(三)发布 / 订阅模式(Publish/Subscribe)

(四)路由模式(Routing)

六、RabbitMQ 高级特性探索

(一)消息持久化

(二)消息可靠性

(三)消费端限流

(二)消息发送与接收

(三)高级应用场景

八、RabbitMQ 集群搭建与管理

(一)集群概述

(二)集群搭建步骤

(三)集群管理与维护

九、常见问题与解决方案

(一)连接失败

(二)消息丢失

(三)性能瓶颈

十、总结与展望


一、引言:RabbitMQ 是什么?

你在生活中一定排过队吧,去热门餐厅吃饭,得在门口排队取号等待就餐;节假日出行,在火车站、机场得排队安检、检票。排队这个行为看似简单,实则蕴含着一种高效的资源分配和任务处理思想。在计算机世界里,也有类似的概念,那就是消息队列。

想象一下,有多个应用程序或服务,它们之间需要互相传递数据、协调工作。如果没有消息队列,它们可能就得像不排队的人群一样,混乱地互相调用、等待,很容易造成混乱和堵塞。而消息队列就像是一个有序的队伍,发送者把消息发送到这个队列中,接收者按照顺序从队列里获取消息进行处理 ,从而实现了异步通信和解耦。

RabbitMQ 便是消息队列领域的佼佼者,它是一个开源的消息代理和队列服务器,使用高级消息队列协议(AMQP)进行通信。它能接受、存储并转发消息,就像一个可靠的快递中转站,保证消息能准确无误地从发送方送到接收方。不管是小型创业公司的业务系统,还是大型互联网企业的分布式架构,RabbitMQ 都能凭借自身强大的功能和稳定的性能,为其提供高效的消息传递解决方案,在消息队列领域占据着举足轻重的地位。接下来,就让我们深入学习这个神奇的 RabbitMQ 吧!

二、RabbitMQ 初相识

RabbitMQ 是一个开源的消息代理和队列服务器,它实现了高级消息队列协议(AMQP),是一个让应用程序之间能够进行异步通信的中间件 。它就像是一个快递中转站,发送方把消息这个 “快递” 送到中转站(RabbitMQ 服务器),接收方再从中转站取走 “快递” 进行处理。这样一来,发送方和接收方不需要直接交互,就能完成消息的传递,大大提高了系统的灵活性和可扩展性。

(一)RabbitMQ 的作用

  1. 应用解耦:在一个大型电商系统中,订单系统、库存系统、物流系统等多个模块相互关联。当用户下单时,如果没有消息队列,订单系统需要直接调用库存系统扣减库存,调用物流系统安排发货,这就使得各个系统之间紧密耦合。一旦库存系统出现故障或者升级维护,订单系统和物流系统都会受到影响。而引入 RabbitMQ 后,订单系统只需将订单消息发送到消息队列,库存系统和物流系统从队列中获取消息进行处理。这样,即使某个系统暂时不可用,消息也会在队列中保存,等系统恢复正常后再继续处理,实现了系统间的解耦 。
  1. 异步处理:以用户注册场景为例,用户注册成功后,系统需要发送欢迎邮件、创建用户积分记录、推送新手引导消息等一系列操作。如果这些操作都在注册的主流程中同步执行,用户可能需要等待较长时间才能看到注册成功的反馈。使用 RabbitMQ 后,注册成功的消息被发送到消息队列,后续的邮件发送、积分创建、引导消息推送等操作可以异步地从队列中获取消息并处理。这样,用户能快速收到注册成功的提示,而后台的其他操作在不影响用户体验的情况下慢慢完成,极大地提高了系统的响应速度和用户体验。
  1. 削峰填谷:在电商的秒杀活动中,大量用户会在同一时刻发起请求,瞬间产生巨大的流量。如果没有任何缓冲机制,服务器可能会因为无法承受如此高的并发而崩溃。RabbitMQ 可以在流量高峰时,将这些请求消息暂存到队列中,服务器按照自身的处理能力,从队列中逐步获取消息进行处理。就像水库在洪水期蓄水,在枯水期放水一样,RabbitMQ 把瞬间的流量高峰 “削平”,让系统能够平稳地处理请求,避免了因流量过大而导致的系统故障 。

(二)RabbitMQ 的应用场景

  1. 电商系统:除了上述提到的订单处理、库存管理和物流调度,在电商促销活动时,RabbitMQ 还能用于处理大量的优惠券发放和订单退款请求。比如 “双 11” 期间,海量的优惠券领取请求可以通过消息队列有序处理,避免系统因瞬间高并发而崩溃;当用户发起退款时,退款请求进入消息队列,系统可以按照一定的规则依次处理,保证退款流程的稳定运行。
  1. 社交平台:在社交平台中,用户发布动态、点赞、评论等操作都会产生大量的消息。以微博为例,当用户发布一条微博后,需要通知关注他的粉丝、更新热门动态列表、进行内容审核等。这些操作通过 RabbitMQ 进行异步处理,能够保证微博系统在高并发情况下依然稳定运行,让用户能够快速地发布和获取信息。
  1. 日志处理:对于大型分布式系统,各个服务都会产生大量的日志。使用 RabbitMQ 可以将这些日志消息集中收集和分发。例如,将不同级别的日志(如错误日志、访问日志、业务日志)发送到不同的队列,然后由专门的日志处理服务从队列中获取日志进行分析、存储或展示 。这样不仅提高了日志处理的效率,还方便对系统运行状态进行监控和故障排查。

三、安装 RabbitMQ,开启学习之旅

(一)安装前的准备

RabbitMQ 是用 Erlang 语言开发的,所以在安装 RabbitMQ 之前,必须先安装 Erlang 运行时环境 。这就好比你要使用一款基于特定操作系统开发的软件,就需要先安装好这个操作系统一样。Erlang 以其强大的并发处理能力和高可靠性,为 RabbitMQ 的稳定运行提供了坚实的基础。

Windows 系统

  1. 访问 Erlang 官网下载页面(Downloads - Erlang/OTP ),根据你的系统是 32 位还是 64 位,选择对应的安装包,如 “otp_win64_XX.YY.exe”。
  1. 运行安装程序,在安装向导中,一路点击 “Next”,可以选择默认安装路径,也可以根据自己的需求自定义路径,但要记住安装路径,后续配置环境变量会用到。
  1. 安装完成后,需要配置系统环境变量。右键点击 “此电脑”,选择 “属性”,点击 “高级系统设置”,在弹出的窗口中点击 “环境变量”。在 “系统变量” 区域,点击 “新建”,变量名输入 “ERLANG_HOME”,变量值为刚才 Erlang 的安装路径,比如 “C:\Program Files\erl-XX.YY”。接着,找到 “Path” 变量,点击 “编辑”,在弹出的窗口中点击 “新建”,输入 “% ERLANG_HOME%\bin” ,保存设置。这样,系统就能找到 Erlang 的可执行文件了。

Linux 系统(以 CentOS 为例)

  1. 首先要确定系统的版本和架构,比如 CentOS 7.x,有 X86 架构和 ARM 架构等。根据系统架构和版本,从 Erlang 官网或其他可靠源下载对应的安装包。如果是 X86 架构的 CentOS 7.x 系统,可以使用以下命令下载指定版本的 Erlang 安装包(以 erlang-23.3.4.11-1.el7.x86_64.rpm 为例):
 

wget --content-disposition "https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.4.11-1.el7.x86_64.rpm/download.rpm?distrio_version_id=140"

  1. 下载完成后,使用以下命令安装:
 

rpm -ivh erlang-23.3.4.11-1.el7.x86_64.rpm

如果安装过程中提示依赖检测失败,比如缺少某些库,可能需要先安装这些依赖库。例如,若提示缺少 “libc.so.6 (GLIBC_2.10)(64bit)” 等依赖,可以尝试添加 “--nodeps --force” 参数进行强制安装,但这种方式可能会带来一些潜在问题,尽量先解决依赖问题再正常安装。

3. 安装完成后,打开终端,输入 “erl -version”,如果输出版本信息,说明 Erlang 安装成功。

MacOS 系统

  1. 可以使用 Homebrew 来安装 Erlang,Homebrew 是 MacOS 上非常强大的包管理工具。如果没有安装 Homebrew,可以先通过官网(Homebrew — The Missing Package Manager for macOS (or Linux) )的指令进行安装。安装好 Homebrew 后,在终端输入以下命令安装 Erlang:
 

brew install erlang

  1. 安装过程中,Homebrew 会自动处理依赖关系并完成安装。安装完成后,同样可以在终端输入 “erl -version” 验证是否安装成功。

在安装 Erlang 时,要特别注意版本兼容性问题。不同版本的 RabbitMQ 对 Erlang 的版本有特定要求,可以参考 RabbitMQ 官网的版本兼容性矩阵(Erlang Version Requirements | RabbitMQ ),确保选择的 Erlang 版本与后续要安装的 RabbitMQ 版本兼容,否则可能会导致安装失败或运行异常。

(二)正式安装 RabbitMQ

Windows 系统

  1. 访问 RabbitMQ 官网下载页面(Installing RabbitMQ | RabbitMQ ),在 “Downloads for Microsoft Windows” 部分,选择适合的版本,下载安装包,如 “rabbitmq-server-windows-XX.YY.zip”。
  1. 下载完成后,解压安装包到你希望安装的目录,比如 “C:\RabbitMQ”。解压后,进入解压目录下的 “sbin” 文件夹。
  1. 以管理员身份运行命令提示符(CMD),进入刚才的 “sbin” 文件夹目录(例如 “C:\RabbitMQ\rabbitmq_server-XX.YY\sbin”),输入以下命令安装 RabbitMQ 服务:
 

rabbitmq-service.bat install

  1. 安装完成后,可以使用以下命令启动 RabbitMQ 服务:
 

rabbitmq-service start

若要停止服务,使用:

 

rabbitmq-service stop

  1. 配置 RabbitMQ 环境变量。右键点击 “此电脑”,选择 “属性”,进入 “高级系统设置”,点击 “环境变量”。在 “系统变量” 中找到 “Path” 变量,点击 “编辑”,添加 RabbitMQ 的 “sbin” 目录路径,例如 “C:\RabbitMQ\rabbitmq_server-XX.YY\sbin” ,保存设置。
  1. 安装 RabbitMQ 管理插件,该插件提供了一个 Web 界面,方便管理和监控 RabbitMQ。在命令提示符中,进入 “sbin” 目录,输入以下命令启用插件:
 

rabbitmq-plugins enable rabbitmq_management

Linux 系统(以 CentOS 为例)

  1. 根据系统版本,从 RabbitMQ 官网或可靠源下载对应的安装包。例如,对于 CentOS 7.x 系统,可以使用以下方式下载安装包(以 rabbitmq-server-3.10.0-1.el7.noarch.rpm 为例):

方式一:使用 curl 命令添加仓库并安装:

 

curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash

yum install rabbitmq-server-3.10.0-1.el7.noarch

方式二:使用 wget 命令下载安装包:

 

wget --content-disposition "https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/7/rabbitmq-server-3.10.0-1.el7.noarch.rpm/download.rpm?distro_version_id=140"

rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc

yum localinstall rabbitmq-server-3.10.0-1.el7.noarch.rpm

  1. 安装完成后,将本机 IP 和主机名绑定,编辑 “/etc/hosts” 文件:
 

vi /etc/hosts

添加类似 “127.0.0.1 your_hostname” 的内容(将 “your_hostname” 替换为实际主机名),保存并退出(按 “Esc” 键,输入 “:wq” 回车)。

3. 启动 RabbitMQ 服务:

 

systemctl start rabbitmq-server

设置开机自动启动:

 

systemctl enable rabbitmq-server

  1. 安装 Web 界面管理插件:
 

rabbitmq-plugins enable rabbitmq_management

如果是在云服务器上,还需要开放 15672 端口(Web 管理界面端口),例如使用防火墙命令:

 

firewall-cmd --zone=public --add-port=15672/tcp --permanent

firewall-cmd --reload

MacOS 系统

  1. 使用 Homebrew 安装 RabbitMQ,在终端输入:
 

brew install rabbitmq

  1. 安装完成后,配置 RabbitMQ 环境变量。打开终端,输入以下命令编辑环境变量文件:
 

vi ~/.bash_profile

在文件中添加:

 

export RABBIT_HOME=/usr/local/Cellar/rabbitmq/XX.YY (将XX.YY替换为实际安装的版本号)

export PATH=$PATH:$RABBIT_HOME/sbin

保存并退出(按 “Esc” 键,输入 “:wq” 回车),然后使配置生效:

 

source ~/.bash_profile

  1. 安装 RabbitMQ 的可视化监控插件,在终端输入:
 

sudo rabbitmq-plugins enable rabbitmq_management

  1. 后台启动 RabbitMQ:
 

sudo rabbitmq-server -detached

查看状态:

 

sudo rabbitmqctl status

(三)验证安装

Windows 系统

  1. 打开浏览器,输入 “http://localhost:15672”,如果能打开 RabbitMQ 的管理界面,并且可以使用默认账号 “guest” 和密码 “guest” 登录,说明安装成功。如果无法打开,检查 RabbitMQ 服务是否正常运行,以及 15672 端口是否被其他程序占用。
  1. 也可以在命令提示符中输入 “rabbitmqctl status”,如果能正确显示 RabbitMQ 的状态信息,同样表明安装成功 。

Linux 系统

  1. 在浏览器中输入服务器的 IP 地址和端口号(例如 “http://your_server_ip:15672”),如果能打开管理界面并登录,说明安装成功。若无法访问,检查防火墙设置、RabbitMQ 服务状态以及端口是否开放。
  1. 在终端输入 “rabbitmqctl status”,查看 RabbitMQ 的运行状态,若能获取到状态信息,说明安装配置无误。

MacOS 系统

  1. 浏览器访问 “http://localhost:15672”,使用默认账号密码登录管理界面,若能成功登录,证明安装成功。
  1. 通过终端命令 “rabbitmqctl status” 查看状态来验证安装是否成功。

通过以上步骤,你已经成功安装并验证了 RabbitMQ,接下来就可以深入学习 RabbitMQ 的使用,开启高效的消息队列之旅啦!

四、深入理解 RabbitMQ 核心概念

(一)生产者与消费者

在 RabbitMQ 的世界里,生产者和消费者是两个关键的角色。生产者,简单来说,就是消息的发送方,它负责创建消息并将这些消息发送到 RabbitMQ 服务器中。比如在一个电商下单系统中,当用户完成下单操作后,下单信息就会作为一条消息,由订单服务这个生产者发送到 RabbitMQ 服务器。

消费者则是消息的接收方,它从 RabbitMQ 服务器的队列中获取消息,并对消息进行处理 。还是以上述电商下单场景为例,库存服务就可以作为消费者,从 RabbitMQ 中获取订单消息,然后根据订单中的商品数量进行库存扣减操作;物流服务也作为消费者,获取订单消息后安排发货等物流流程。生产者和消费者通过 RabbitMQ 进行解耦,生产者不需要关心谁来消费消息,消费者也不需要知道消息是谁生产的,它们之间通过消息队列进行异步通信,大大提高了系统的灵活性和可扩展性 。

(二)交换机(Exchange)

交换机在 RabbitMQ 中扮演着消息路由的关键角色。它接收来自生产者的消息,然后根据特定的路由规则,将这些消息转发到一个或多个队列中。交换机就像是一个智能的交通枢纽,根据不同的 “交通规则”(路由规则),把消息这辆 “车” 送到不同的 “目的地”(队列)。

RabbitMQ 中有四种常见类型的交换机:

  1. direct(直连交换机):这种交换机的路由规则最为简单直接,它根据消息的路由键(Routing Key)和队列的绑定键(Binding Key)进行精确匹配。只有当消息的路由键与某个队列的绑定键完全一致时,消息才会被路由到该队列。例如,在一个日志收集系统中,我们可以将不同级别的日志(如 info、warning、error)作为不同的路由键,创建对应的队列并绑定相应的绑定键。当生产者发送一条路由键为 “error” 的日志消息时,直连交换机就会将这条消息精确地路由到绑定键为 “error” 的队列中,方便后续对错误日志进行集中处理 。
  1. fanout(扇出交换机):扇出交换机就像一个广播器,它不关心消息的路由键,而是将接收到的消息无条件地广播到所有与它绑定的队列中。在一个实时通知系统中,当有新的通知消息产生时,生产者将消息发送到扇出交换机,无论这些队列的用途是什么,只要它们与扇出交换机绑定,就都会收到这条通知消息,实现了消息的广泛传播。
  1. topic(主题交换机):主题交换机的路由规则相对灵活,它使用通配符来匹配路由键和绑定键。它支持两种通配符:“” 代表匹配一个单词,“#” 代表匹配零个或多个单词。在一个电商的商品信息管理系统中,商品的类别可能有很多层级,如 “electronics.mobile”(电子产品 - 手机)、“electronics.tv”(电子产品 - 电视)等。我们可以创建一个主题交换机,对于关注所有电子产品信息的队列,可以使用绑定键 “electronics.#” 进行绑定;对于只关注手机信息的队列,可以使用绑定键 “electronics.mobile” 或者 “electronics..mobile”(如果类别层级更复杂)进行绑定。这样,当生产者发送一条路由键为 “electronics.mobile.iphone15” 的商品消息时,绑定键为 “electronics.#” 和 “electronics.mobile” 的队列都会收到这条消息,实现了根据不同的主题需求灵活路由消息。
  1. headers(头部交换机):头部交换机与前面三种交换机不同,它不是根据路由键来路由消息,而是根据消息的头部信息(Headers)进行匹配。在绑定队列和交换机时,可以指定一组键值对;当消息的头部中包含这些键值对时,消息就会被路由到该队列。例如,在一个需要根据消息的发送者、优先级等多个属性进行路由的系统中,我们可以在消息的头部设置 “sender”(发送者)、“priority”(优先级)等属性,然后通过头部交换机根据这些属性进行复杂的路由规则设置,将消息路由到合适的队列 。不过,由于头部交换机的匹配规则相对复杂,性能相对较低,所以在实际应用中使用频率不如其他三种交换机高 。

(三)队列(Queue)

队列是 RabbitMQ 中用于存储消息的内部对象,它就像是一个存放快递的仓库,生产者发送的消息会被存储在队列中,等待消费者来取走处理。队列在消息传递过程中起着缓冲的作用,能够协调生产者和消费者的速度差异,确保消息不会因为生产者发送过快或消费者处理过慢而丢失 。

队列分为持久化队列和非持久化队列:

  1. 持久化队列:在创建队列时,将 durable 参数设置为 true,就可以创建一个持久化队列。持久化队列会将队列的元数据(如队列名称、属性等)以及队列中的消息都存储到磁盘上。这样,即使 RabbitMQ 服务器发生故障重启,持久化队列及其消息依然存在,不会丢失。在一个电商的订单处理系统中,订单消息非常重要,不能因为服务器故障而丢失,就可以使用持久化队列来存储订单消息,保证订单处理的可靠性。
  1. 非持久化队列:非持久化队列则是将队列和消息存储在内存中,不进行磁盘存储。它的优点是读写速度快,性能较高,因为内存的读写速度远远快于磁盘。但缺点也很明显,一旦 RabbitMQ 服务器出现故障,内存中的数据会丢失,非持久化队列及其消息也会随之消失。在一些对实时性要求较高,但对消息可靠性要求相对较低的场景,比如即时通讯系统中的一些临时通知消息,就可以使用非持久化队列,以提高系统的响应速度 。

(四)绑定(Binding)

绑定是在交换机和队列之间建立联系的过程,它确定了消息从交换机路由到队列的规则。通过绑定,我们可以告诉交换机,当它接收到某个特定路由键(或满足特定头部信息等)的消息时,应该将消息发送到哪个队列中。绑定就像是在交通枢纽(交换机)和目的地(队列)之间建立了一条条明确的路线,让消息能够准确无误地到达它该去的地方 。

在代码中,绑定操作通常通过调用相应的 API 来实现。以 Python 的 pika 库为例,假设我们有一个名为 “my_exchange” 的 direct 类型交换机和一个名为 “my_queue” 的队列,要将它们进行绑定,代码如下:

 

import pika

# 创建连接

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))

channel = connection.createChannel()

# 声明交换机和队列

channel.exchange_declare(exchange='my_exchange', exchange_type='direct')

channel.queue_declare(queue='my_queue')

# 进行绑定,假设绑定键为'my_routing_key'

channel.queue_bind(exchange='my_exchange', queue='my_queue', routing_key='my_routing_key')

# 后续可以进行消息发送等操作

# 关闭连接

connection.close()

在上述代码中,channel.queue_bind方法完成了交换机和队列的绑定操作,其中routing_key='my_routing_key'指定了绑定键,这样当 “my_exchange” 交换机接收到路由键为 “my_routing_key” 的消息时,就会将消息路由到 “my_queue” 队列中。

(五)消息(Message)

消息是 RabbitMQ 中传递的基本单元,它由两部分组成:消息体和消息属性。

  1. 消息体:这是消息的核心内容,也就是我们实际要传递的数据。在电商下单场景中,消息体可能包含订单的详细信息,如订单编号、商品列表、下单用户信息、订单金额等。消息体可以是各种格式的数据,如文本、JSON、二进制数据等,具体取决于应用的需求。
  1. 消息属性:消息属性为消息提供了一些额外的信息,用于控制消息的行为和特性。常见的消息属性有:
  • 持久化(delivery-mode):当delivery-mode设置为 2 时,表示消息是持久化的。持久化消息会被存储到磁盘上,即使 RabbitMQ 服务器重启,消息也不会丢失,从而保证了消息的可靠性。而delivery-mode为 1 时表示非持久化消息,存储在内存中,服务器故障时可能丢失。在一个银行转账系统中,转账消息至关重要,必须保证不丢失,就需要将转账消息设置为持久化消息。
  • 优先级(priority):消息优先级允许我们为不同的消息设置不同的重要程度。取值范围一般是 0 - 9,值越大优先级越高。当队列中有多个消息等待处理时,消费者会优先处理优先级高的消息。在一个任务调度系统中,紧急任务的消息可以设置较高的优先级,以便优先被处理,确保紧急任务能够及时完成 。
  • 过期时间(expiration):可以通过设置expiration属性来指定消息的过期时间,单位通常是毫秒。当消息在队列中停留的时间超过了过期时间,RabbitMQ 会自动将其删除。在一个限时优惠活动的消息通知系统中,活动过期后,相关的通知消息就没有意义了,可以为这些消息设置过期时间,让 RabbitMQ 自动清理过期消息,释放资源 。

在代码中设置消息属性也很简单,同样以 Python 的 pika 库为例,发送一条带有持久化和优先级属性的消息:

 

import pika

# 创建连接

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))

channel = connection.createChannel()

# 声明队列

channel.queue_declare(queue='my_queue')

# 设置消息属性

properties = pika.BasicProperties(

delivery_mode=2, # 持久化

priority=5 # 优先级为5

)

# 发送消息

channel.basic_publish(exchange='', routing_key='my_queue', body='Hello, RabbitMQ!', properties=properties)

# 关闭连接

connection.close()

在上述代码中,通过pika.BasicProperties设置了消息的持久化和优先级属性,然后在发送消息时传入这些属性,就完成了对消息属性的设置 。

五、RabbitMQ 工作模式详解

(一)简单模式(Hello World)

简单模式是 RabbitMQ 中最基础的工作模式,就像两个人面对面直接传递物品一样,非常直接简单。在这个模式中,生产者直接将消息发送到队列,消费者从队列接收消息 ,整个过程没有复杂的路由规则,非常适合初学者理解 RabbitMQ 的基本工作原理 。

假设我们正在开发一个简单的日志记录系统,生产者是应用程序中的日志生成模块,每当有新的日志产生时,它就会将日志消息发送到 RabbitMQ。消费者则是日志处理模块,它从队列中获取日志消息,然后将其存储到文件或者数据库中。

下面是 Python 代码示例:

 

# 生产者

import pika

# 建立与RabbitMQ服务器的连接

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))

channel = connection.channel()

# 声明一个队列

channel.queue_declare(queue='hello')

# 发送消息到队列

channel.basic_publish(exchange='', routing_key='hello', body='Hello, RabbitMQ!')

print(" [x] Sent 'Hello, RabbitMQ!'")

# 关闭连接

connection.close()

 

# 消费者

import pika

# 定义回调函数,处理接收到的消息

def callback(ch, method, properties, body):

print(" [x] Received %r" % body)

# 建立与RabbitMQ服务器的连接

connection = pika.BlockingConnection(pika.Connec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雨淅淅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值