当前位置: 首页 > 知识库问答 >
问题:

为什么publisher在Pika RabbitMQ中声明队列a?

司空赞
2023-03-14

我已经学习了RabbitMQ的基础知识。有一件事我想出来了,发布者并不直接在队列上发布。exchange根据routing-key和exchange类型(下面的代码使用默认exchange)来决定应该发布消息的队列。我还找到了Publisher的示例代码。

import pika, os, logging
logging.basicConfig()
# Parse CLODUAMQP_URL (fallback to localhost)
url = os.environ.get('CLOUDAMQP_URL', 'amqp://guest:guest@localhost/%2f')
params = pika.URLParameters(url)
params.socket_timeout = 5
connection = pika.BlockingConnection(params)
channel = connection.channel()
channel.queue_declare(queue='pdfprocess')
# send a message
channel.basic_publish(exchange='', routing_key='pdfprocess', body='User information')
print ("[x] Message sent to consumer")
connection.close()

共有1个答案

马煌
2023-03-14

使用者可以声明队列,并在使用者连接到RabbitMQ时将其绑定到交换。然后,扇出交换将接收到的消息复制并路由到绑定到它的所有队列,与直接交换和主题交换的路由密钥或模式匹配无关。

因此,发布者不必知道绑定到交换的所有队列。但是,发布者可以确保队列存在,以确保代码将顺利运行,但对于其他exchange类型而言,这一点更为重要。

 类似资料:
  • 问题内容: 在JDK 1.7中,存在一个声明。 他们为什么要制造新的而不使用: 问题答案: 因为通过返回的 后盾 给定的数组。它包装该数组;数组的更改反映在中,反之亦然。 另外,因此,返回的此处具有固定大小。因此,它不能是因为可以增长或收缩。

  • 问题内容: 如果语言设计者仅使用Enum 会对语言产生怎样的影响? 现在唯一的区别是有人会写 A扩展 但由于Java中不允许扩展枚举,因此仍然是非法的。我也在考虑为jvm提供一个字节码,该字节码将smth定义为扩展枚举-但是泛型不会受到影响,因为它们都被删除了。 那么,声明的重点是什么? 谢谢! 编辑 为简单起见,让我们来看一个例子: 这个类结构有什么问题?限制可以做什么? 问题答案: 这是一个普

  • 问题内容: 当我得知该类在Java中被声明为final时,我想知道为什么会这样。那时我没有找到任何答案,但是这篇文章:如何在Java中创建String类的副本?让我想起了我的疑问。 当然,String提供了我所需要的所有功能,而且我从未想过需要扩展String类的任何操作,但是您仍然永远不会知道有人可能需要什么! 那么,有谁知道设计师决定将其定稿时的意图是什么? 问题答案: 将字符串实现为不可变对

  • 对于伪代码 出现错误的原因是我的CSV文件是分块解析的,即我不是一次传递整个文件内容,而是传递其中的一个块,错误是有意义的,因为不能保证会遇到关闭令牌 例如,字符串可以是。 但是,问题是,这些类被声明为final类,我不能扩展它们。我想明白为什么这些类被声明为final?

  • 它适用于我声明的结构xy。为什么相同的模式不适用于复杂的 错误消息: 我最好的猜测是这与

  • 问题内容: 我想知道java集合API中上述两者之间的实际区别是什么。我是Java Collections API的新手。我知道List是ArrayList类实现的接口。 问题答案: 在你的声明1,因为你是指因为虽然它仍然是, 因此你可以使用在可用的方法唯一接口。如果您正在使用跨class.method功能,这是更好的声明。 同样,任何接受方法都可以接受任何实现类,例如或您的自定义实现类。 您的第