RabbitMQ入门篇

本文介绍了RabbitMQ的关键特性,包括消息队列、灵活路由、持久化和可靠性。通过示例展示了如何使用RabbitMQ进行Hello World、持久化设置、公平调度、Fanout、Direct和Topic交换器的配置。此外,还提到了其Web界面的访问方式。
摘要由CSDN通过智能技术生成

RabbitMQ 是一个开源的消息队列软件,可以看成为软件层面的路由器,以下是 RabbitMQ 的一些关键特性:

  1. 消息队列:RabbitMQ 作为一个消息代理,允许应用程序之间交换各种类型的数据。消息被发送到队列,然后被消费者或其他应用程序接收。
  2. 灵活的路由:RabbitMQ 允许使用各种策略进行消息路由,包括扇出交换(Fanout)、直接交换(Direct)和主题交换(Topic),使得消息能够根据规则被传送到特定的队列中。
  3. 持久化:RabbitMQ 支持将消息和队列进行持久化,即使在代理重启之后也能保证消息的持久性。
  4. 可靠性:RabbitMQ 提供了确认机制,确保消息在发送和接收之间的可靠传输。
  5. 灵活的集成:RabbitMQ 可以与多种编程语言和框架进行集成,包括 Python、Java、Node.js 等。

消息队列是一种通信模式,用于在应用程序之间传递消息。消息队列的作用主要体现在以下几个方面:

  1. 解耦:消息队列可以将应用程序解耦,使得发送消息的应用程序不需要知道接收消息的应用程序的细节。通过消息队列,发送者和接收者之间可以实现松散的耦合,即使其中一个应用程序出现问题,也不会影响另一个应用程序的运行。
  2. 异步:消息队列可以实现异步通信,发送者可以将消息发送到队列中之后立即返回,而无需等待接收者处理消息。这种异步通信方式可以提高系统的并发性能和响应速度。
  3. 消峰:消息队列可以作为缓冲区,用于处理突发的大量消息。如果接收应用程序的处理能力有限,消息队列可以暂存消息,使得发送者能够继续发送消息,而不会因为接收端处理能力不足而丢失消息。

在软件系统中,消息队列常用于微服务架构、异步任务、应用解耦等场景,可以提高系统的可伸缩性、可靠性和灵活性。

安装

如果希望快速体验,可以通过docker镜像安装使用

docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management

如果需要手动安装,可以查看官方文档

Hello World示例

生产者往队列写入消息,消费者获取消息

请添加图片描述

send.py

#!/usr/bin/env python
import pika

# 建立连接
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()

# 声明队列
channel.queue_declare(queue='hello')

# 指定消息和队列的对应关系,即将消息存入哪个队列
#(空字符串的默认交换器,允许我们指定消息应发送到哪个队列,队列名称在routing_key中指定)
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
print(" [x] Sent 'Hello World!'")

connection.close()

receive.py

#!/usr/bin/env python
import pika, sys, os

def main():
    # 建立连接
    connection = pika.BlockingConnection(pika.ConnectionParameters(host='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()

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print('Interrupted')
        try:
            sys.exit(0)
        except SystemExit:
            os._exit(0)

运行

shell1 启动消费者

python receive.py
# => [*] Waiting for messages. To exit press CTRL+C

shell2 启动生产者

python send.py
# => [x] Sent 'Hello World!'

输出

shell1

python receive.py
# => [*] Waiting for messages. To exit press CTRL+C
# => [x] Received 'Hello World!'

持久化与公平调度

持久化:通过设置durable=Truepika.DeliveryMode.Per

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值