我是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是探测器的名称。
一切正常。但是我该怎么做才能让没有人正在收听的路由键的消息立即被丢弃?现在,如果我的消费者停止收听路由密钥或根本没有运行,则探针发送的消息开始堆积。当我启动我的消费者或让它听一段时间没有收听的路由密钥时,我可能会有成千上万的消息积压。这不是我需要的,而且积压必然会导致资源耗尽。
有没有办法修改这个,以便在他们到达交易所时没有人收听消息而丢弃消息而不是排队?我认为有一种方法,但谷歌和鼠兔文件没有帮助。
提前致谢。
答案 0 :(得分:0)
但是我如何使消息传递给没有人的路由键 听着立即被丢弃?
默认情况下,Rabbitmq已实现此功能。您只需要确保没有绑定到该路由密钥的队列。
现在,如果我的消费者停止收听路由键或未运行 根本就是,探针发送的消息开始堆积
如果该路由密钥没有队列,则将丢弃所有消息。
有没有办法修改它,以便消息被丢弃 如果在他们到达时没有人听他们排队 交换?
Rabbitmq defualt行为本身支持此(对于Direct Exchange)
浏览https://www.rabbitmq.com/tutorials/tutorial-four-python.html
页面