资讯专栏INFORMATION COLUMN

rabbitmq常用的三种exchange类型和python库pika接入rabbitmq

YancyYe / 3523人阅读

摘要:可以简单方便的通过配置,并可以向和中发消息来验证自己的理解。然后通过发送消息,可以随便填写,因为是类型的,不起作用。这种情况下,队列之间是互斥关系,一个消息最多只能进入一个队列。

现在很多开源软件都提供了对应的web管理界面,rabbitmq也不例外,rabbitmq提供了一个web插件。当rabbit-server启动之后,即在浏览器中通过http://localhost:15672/地址访问页面,提供一个比命令rabbitmqctl更友好的学习rabbitmq的方式。可以简单方便的通过配置rabbitmq,并可以向exchange和queue中发消息来验证自己的理解。如下图:

Rabbitmq 常用三种exchange类型: Fanout exchange:

这是处理逻辑最简单的exchange类型,实际上它没有任何逻辑,它把进入该exchange的消息全部转发给每一个绑定的队列中,如果这个exchange没有队列与之绑定,消息会被丢弃。

测试:
新建一个fanout类型的exchange,名称叫fanoutTest,并绑定两个routing key是hello.world的队列,如下图所示。

然后通过exchange发送消息,routing key可以随便填写,因为是fanout类型的exchange,routing key不起作用。点击publish按钮,即可发送消息。

两个消息队列都接收到了对应的消息,如下图所示,(消费队列的时候有个Requeue的选项,如果是“Yes”,消息会再入队,如果是“NO”,则消息被消费之后队列中就不会存在这个消息了)

Direct exchange

这种类型的交换机Fancout 类型的交换机智能一些,它会根据routing key来决定把消息具体扔到哪个消息队列中。通过exchange发消息的时候会指定一个routing key,只有当routing key和与队列绑定的routing key一样的时候,消息才对发送到对应的消息队列。即,如果与某个队列绑定的routing key叫hello.world,则通过exchange发送的routing key必须也是hello.world,该队列才能接收到消息(可按上述步骤进行验证)。这种情况下,队列之间是互斥关系,一个消息最多只能进入一个队列。

Topic exchange

Topic exchange是最灵活的exchange,它会把exchange的routing key与绑定队列的routing key进行模式匹配。Routing key中可以包含 和#两种符号,#号可以用来匹配一个或者多个单词,用来匹配正好一个单词。官方的下图很好地说明了这个问题,读者最好自己动手验证一下。

Python脚本操作Rabbitmq

python有多个可以接入rabbitmq的库,pika是官方推荐的一个。我在公司批量创建消息队列的需求,于是写了一个python批量创建消息队列的脚本。
首先安装pika:
sudo pip install pika==0.10.0

请输入代码

__author__ = "tianbing"
 
import os
import sys
import pika
 
 
def createVerifyCardQueues():
    credentials = pika.PlainCredentials("your user", "your password")
    connection = pika.BlockingConnection(pika.ConnectionParameters("127.0.0.1",5672,"/",credentials))
    channel = connection.channel()
 
    name_prefix = "merchant.verifycard.async"
    exchange_name = "paybiz.merchant.exchange"
    channel.queue_declare()
    start=10
    end = 26
    for biz_type in range(start, end):
        queue_name = name_prefix + str(biz_type)
        channel.queue_declare(queue_name,False,True)
        channel.queue_bind(queue_name,exchange_name,queue_name)
 
if __name__ == "__main__":
    createVerifyCardQueues()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37627.html

相关文章

  • rabbitmq中文教程python版 - 发布 / 订阅

    摘要:交易所在本教程的前几部分中,我们发送消息并从队列中接收消息。消费者是接收消息的用户的应用程序。中的消息传递模型的核心思想是生产者永远不会将任何消息直接发送到队列中。交换和队列之间的关系称为绑定。 源码:https://github.com/ltoddy/rabbitmq-tutorial 发布 / 订阅 (using the Pika Python client) 本章节教程重点介绍的...

    alphahans 评论0 收藏0
  • RabbitMQ 快速入门 python

    摘要:为了预防消息丢失,提供了,即工作进程在收到消息并处理后,发送给,告知这时候可以把该消息从队列中删除了。如果工作进程挂掉了,没有收到,那么会把该消息重新分发给其他工作进程。之前在发布消息时,的值为即使用。 HelloWorld 简介 RabbitMQ:接受消息再传递消息,可以视为一个邮局。发送者和接受者通过队列来进行交互,队列的大小可以视为无限的,多个发送者可以发生给一个队列,多个接收者...

    wenshi11019 评论0 收藏0
  • rabbitmq中文教程python版 - 介绍

    摘要:每当我们收到一条消息,这个回调函数就被皮卡库调用。接下来,我们需要告诉这个特定的回调函数应该从我们的队列接收消息为了让这个命令成功,我们必须确保我们想要订阅的队列存在。生产者计划将在每次运行后停止欢呼我们能够通过发送我们的第一条消息。 源码:https://github.com/ltoddy/rabbitmq-tutorial 介绍 RabbitMQ是一个消息代理:它接受和转发消息。你...

    yimo 评论0 收藏0
  • python开发-实现RabbitMQ的消息队列

    摘要:最近在研究做消息队列时,顺便看了一下做消息队列的实现。远程连接时需要认证实例化连接对象实例化链接参数对象创建新的通道模式向绑定到指定的中发送消息,消费者从中取出数据,类似于广播模式发布订阅模式。 最近在研究redis做消息队列时,顺便看了一下RabbitMQ做消息队列的实现。以下是总结的RabbitMQ中三种exchange模式的实现,分别是fanout, direct和topic。 ...

    EastWoodYang 评论0 收藏0
  • rabbitmq中文教程python版 - Topics

    摘要:单词可以是任何东西,但通常它们指定了与该消息相关的一些功能。消息将使用由三个字两个点组成的路由键发送。另一方面,只会进入第一个队列,而只会进入第二个队列。不匹配任何绑定,因此将被丢弃。代码几乎与前一个教程中的代码相同。 源码:https://github.com/ltoddy/rabbitmq-tutorial Topics (using the Pika Python client)...

    ernest.wang 评论0 收藏0

发表评论

0条评论

YancyYe

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<