丢弃没有人在听的rabbitmq消息

时间:2017-04-12 17:48:45

标签: python rabbitmq pika

我是rabbitmq短信的完全新手,如果这个问题很愚蠢或者我的设置完全呈梨形,我会道歉。

我使用rabbitmq的设置是从某些探测器发送消息。每个探针都有一个唯一的名称。然后我有一个集中的服务器来处理数据 - 如果有需要的话。

我使用与探测名称对应的直接交换和路由键。

我声明我的消费者(服务器)如​​下(这或多或少来自rabbitmq教程):

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.exchange_declare(exchange="foo", type="direct")
result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue

如果在某些时候我对探测报告的内容感兴趣,我会发出

channel.queue_bind(exchange="foo", queue=queue_name, routing_key="XXX")

其中XXX是探测器的名称。

我在探测器上的发布者声明如下:

connection = pika.BlockingConnection(pika.ConnectionParameters(host="foo.bar.com"))
channel = connection.channel()
channel.exchange_declare(exchange="foo", type="direct")

当我发送消息时,我使用

channel.basic_publish(exchange="foo", routing_key="XXX", body=data)

其中XXX是探测器的名称。

一切正常。但是我该怎么做才能让没有人正在收听的路由键的消息立即被丢弃?现在,如果我的消费者停止收听路由密钥或根本没有运行,则探针发送的消息开始堆积。当我启动我的消费者或让它听一段时间没有收听的路由密钥时,我可能会有成千上万的消息积压。这不是我需要的,而且积压必然会导致资源耗尽。

有没有办法修改这个,以便在他们到达交易所时没有人收听消息而丢弃消息而不是排队?我认为有一种方法,但谷歌和鼠兔文件没有帮助。

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

但是我如何使消息传递给没有人的路由键   听着立即被丢弃?

默认情况下,Rabbitmq已实现此功能。您只需要确保没有绑定到该路由密钥的队列。

  

现在,如果我的消费者停止收听路由键或未运行   根本就是,探针发送的消息开始堆积

如果该路由密钥没有队列,则将丢弃所有消息。

  

有没有办法修改它,以便消息被丢弃   如果在他们到达时没有人听他们排队   交换?

Rabbitmq defualt行为本身支持此(对于Direct Exchange)

浏览https://www.rabbitmq.com/tutorials/tutorial-four-python.html

页面