RabbitMQ详细讲解

这篇具有很好参考价值的文章主要介绍了RabbitMQ详细讲解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是消息队列

在分布式系统中,不同模块之间需要通信和交换信息。但是传统的通信方法(如 HTTP)会带来一些问题:耦合性高,反应慢,并且无法容忍荷载瞬间增大的情况。这时候,消息队列就能充分发挥它的优势了。

消息队列是指一种相对于本地数据存储设备而言更强调异步、解耦、流控和削峰的技术方案。基于消息队列机制,可以轻松地实现不同程序之间的异步消息传递,从而降低了程序的耦合度,同时还能够在一定程度上保证程序的稳定性和可靠性,提升了整个系统的性能。

为什么使用 RabbitMQ

RabbitMQ 是开源的消息代理软件,采用了 Erlang 语言实现,具有以下几个优点:

  1. 可扩展性好:由于 RabbitMQ 是纯 Erlang 实现,拥有很高的并发处理能力,支持每秒钟数百万条消息的处理。因此,RabbitMQ 具有很好的可扩展性。

  2. 支持多种协议:RabbitMQ 支持 AMQP 协议、STOMP 协议等,同时还兼容 MQTT 协议等。

  3. 提供了各种功能:RabbitMQ 提供了如消息持久化、高可用性、HA 模式等多种功能,支持负载均衡、断线重连机制等。

  4. 易于使用和配置:RabbitMQ 功能齐全,同时又相对简单。Python 提供了许多 RabbitMQ 的客户端库(如 Puka,Py-AMQP 和 Kombu 等),可以轻松地在 Python 中使用 RabbitMQ。

RabbitMQ 主要概念

在使用 RabbitMQ 之前,需要先了解一些基础概念。

Message Broker

Message Broker 是指消息代理,它是实现消息传递、路由和转换的中间件软件,位于生产者和消费者之间。

Producer

Producer 是指消息的发布者,将消息发送到 Exchange。

Exchange

Exchange 负责接收来自 Producer 发送的消息并根据消息类型选择一个或多个合适的 Queue 投递给 Consumer。

Queue

Queue 是存储消息的队列,它是 Consumer 处理消息的“容器”。

Routing Key

Routing Key 是通过 Xchange 将 Message 路由到具体的 Queue 所必须的参数。

Consumer

Consumer 是消息的接收者,负责从指定的 Queue 或订阅的主题订阅消息并进行处理。

如何使用 RabbitMQ

现在,我们来尝试使用 Python 中的 Pika 库和 RabbitMQ 实现一个简单的消息队列生产者和消费者。在本例中,我们将使用默认设置(即使用虚拟主机/主机名 localhost)。首先,确保你已经安装了 Pika 库:

$ pip install pika

生产者

import pika


def main():
    connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
    channel = connection.channel()
    channel.queue_declare(queue='hello')
    channel.basic_publish(exchange='',
                          routing_key='hello',
                          body='Hello World!')
    print(" [x] Sent 'Hello World!'")
    connection.close()

if __name__ == '__main__':
    main()

以上代码做了如下的事情:

  1. 创建了一个与 RabbitMQ 服务器建立连接的 BlockingConnection。连接到主机名为 localhost,也就是默认设置。

  2. 通过 Channel 宣告了一个 Queue。如果 Queue 不存在则会被创建。

  3. 发送了一条消息。通过调用 basic_publish 将消息发布到指定的 Exchange,该 Exchange 会将消息推送给相应的 Queue。

  4. 关闭连接。最后一定要关闭连接。

消费者

import pika


def callback(ch, method, properties, body):
    print("Received %r" % body)


def main():
    connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
    channel = connection.channel()
    channel.queue_declare(queue='hello')
    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__':
    main()

以上代码做了如下的事情:

  1. 创建一个与 RabbitMQ 服务器建立连接的 BlockingConnection,并获得一个 Channel 对象。

  2. 使用 queue_declare() 定义了一个名称为 hello 的 Queue。

  3. 将这个 Queue 绑定到 default 的 Exchange 上去。default 的 Exchange 会从消息的 Routing Key 中解析出来相应的 Queue 进行消息推送。

  4. 通过 basic_consume() 阻塞当前进程,等待消息。

  5. 当有消息到达时回调函数 callback() 会被触发,将消息打印出来。

  6. 最后关闭 Connection 和 Channel。确保 Pika 已经把所有信息发送给了 RabbitMQ Server,否则会影响 RabbitMQ Server 因为TCP连接的最大文件接收大小。

你可以使用以下命令运行生产者和消费者:

$ python producer.py
$ python consumer.py

输出将会是:

Producer:

[x] Sent 'Hello World!'

Consumer:

 [*] Waiting for messages. To exit press CTRL+C
Received b'Hello World!'

总结

RabbitMQ 是一款功能强大、易于使用的消息队列软件。在本文中,我们简单地介绍了消息队列的概念及 RabbitMQ 的工作原理与主要概念,并通过 Python 中的 Pika 库实现了一个简单的生产者和消费者。使用 RabbitMQ 可以提升系统并发量、可靠性和稳定性,非常适合用于需要解耦不同模块之间通信的业务场景。如果需要更深入学习 RabbitMQ,可以访问 RabbitMQ 官网(www.rabbitmq.com)获取相关资料。文章来源地址https://www.toymoban.com/news/detail-501168.html

到了这里,关于RabbitMQ详细讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【分布式技术】消息队列Kafka

    目录 一、Kafka概述 二、消息队列Kafka的好处 三、消息队列Kafka的两种模式 四、Kafka 1、Kafka 定义 2、Kafka 简介 3、Kafka 的特性 五、Kafka的系统架构 六、实操部署Kafka集群  步骤一:在每一个zookeeper节点上完成kafka部署 ​编辑 步骤二:传给其他节点 步骤三:启动3个节点 kafka管理

    2024年01月23日
    浏览(55)
  • 分布式消息队列RocketMQ概念详解

    目录 1.MQ概述 1.1 RocketMQ简介 1.2 MQ用途 1.3 常见MQ产品 2.RocketMQ 基本概念 2.1 消息 2.2 主题 2.3 标签 2.4 队列  2.5 Producer 2.6 Consumer 2.7 NameServer 2.8 Broker 2.9 RocketMQ 工作流程   RocketMQ 是阿里开源的分布式消息中间件,跟其它中间件相比,RocketMQ 的特点是纯JAVA实现,是一套提供了消息

    2024年02月03日
    浏览(65)
  • 架构核心技术之分布式消息队列

    Java全能学习+面试指南:https://javaxiaobear.cn 今天我们来学习分布式消息队列,分布式消息队列的知识结构如下图。 主要介绍以下内容: 同步架构和异步架构的区别。异步架构的主要组成部分:消息生产者、消息消费者、分布式消息队列。异步架构的两种主要模型:点对点模型

    2024年02月07日
    浏览(46)
  • Spring Boot如何实现分布式消息队列

    在分布式系统中,消息队列是非常重要的一部分,可以帮助开发人员实现异步处理、解耦系统、提高系统可靠性等。本文将介绍如何使用 Spring Boot 实现分布式消息队列。 消息队列是一种存储消息的容器,可以缓存消息并在需要的时候按照一定的规则将消息发送给消费者。常

    2024年02月14日
    浏览(43)
  • 分布式消息队列Kafka(四)- 消费者

    1.Kafka消费方式 2.Kafka消费者工作流程 (1)总体工作流程 (2)消费者组工作流程 3.消费者API (1)单个消费者消费 实现代码 (2)单个消费者指定分区消费 代码实现: (3)消费者组消费 复制上面CustomConsumer三个,同时去订阅统一个主题,消费数据,发现一个分区只能被一个

    2023年04月26日
    浏览(49)
  • 分布式 - 消息队列Kafka:Kafka生产者发送消息的方式

    不管是把Kafka作为消息队列、消息总线还是数据存储平台,总是需要一个可以往Kafka写入数据的生产者、一个可以从Kafka读取数据的消费者,或者一个兼具两种角色的应用程序。 Kafka 生产者是指使用 Apache Kafka 消息系统的应用程序,它们负责将消息发送到 Kafka 集群中的一个或多

    2024年02月13日
    浏览(44)
  • 分布式应用之zookeeper集群+消息队列Kafka

           ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。为分布式框架提供协调服务的

    2024年02月06日
    浏览(66)
  • zookeeper+kafka分布式消息队列集群的部署

    目录 一、zookeeper 1.Zookeeper 定义 2.Zookeeper 工作机制 3.Zookeeper 特点 4.Zookeeper 数据结构 5.Zookeeper 应用场景 (1)统一命名服务 (2)统一配置管理 (3)统一集群管理 (4)服务器动态上下线 6.Zookeeper 选举机制 (1)第一次启动选举机制 (2)非第一次启动选举机制 7.部署zookeepe

    2024年02月14日
    浏览(52)
  • 分布式 - 消息队列Kafka:Kafka 消费者消息消费与参数配置

    01. 创建消费者 在读取消息之前,需要先创建一个KafkaConsumer对象。创建KafkaConsumer对象与创建KafkaProducer对象非常相似——把想要传给消费者的属性放在Properties对象里。 为简单起见,这里只提供4个必要的属性:bootstrap.servers、key.deserializer 和 value.deserializer。 ① bootstrap.servers 指

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包