我是rabbitmq消息傳遞的完全新手,如果這個問題很傻或者我的設置完全是梨形的,我很抱歉。丟棄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是探測器的名稱。
這一切工作正常。但是,我該如何做到這一點,使得沒有人正在聽的路由密鑰消息立即被丟棄?現在,如果我的客戶停止收聽路由密鑰或根本沒有運行,探測器發送的消息就開始堆積起來。當我啓動消費者或讓它聽一段時間沒有聽到路由密鑰時,我可能會有數以萬計的消息積壓在那裏。這不是我需要的,積壓必然會導致資源耗盡。
有沒有一種方法可以修改它,以便在消息到達交換機時沒有人監聽消息而不是排隊等待消息?我會假設有一種方法,但谷歌和pika文件沒有幫助。
在此先感謝。
OK Go的通過網頁,所以只要我關閉監聽隊列,消息應該被丟棄。我會接受這個答案。有沒有一種方法可以用rabbitmqctl來檢查那裏是否有排隊的消息,以驗證它是否有效? – Hannu
要查看排隊消息,您可以使用rabbitmq管理插件。更多詳細信息,請參閱http://stackoverflow.com/questions/10709533/is-it-possible-to-view-rabbitmq-message-contents-directly-from-the-command -線 –