2014-06-24 41 views
0

我們正在嘗試構建一個包含nodejs,rabbitmq和mongodb的聊天應用程序。爲了更快地傳遞消息,我們使用rabbitmq。由於我對這個概念很陌生,如果有人願意,請幫助我。我正在使用節點amqp模塊連接到rabbitmq服務器(https://www.npmjs.org/package/amqp)。使用節點amqp庫檢查RabbitMQ中是否存在隊列的方法

我聲明交換下面給出:

變種AMQP =要求( 'AMQP'); VAR amqpconnection = amqp.createConnection({主機: '本地主機'}); VAR交換= amqpconnection.exchange( 'Exchange',{confirm:true,type:「direct」,durable:true,autoDelete:false},function(exchange){});

我發佈使用下面的方法的消息:

exchange.publish( 'receiver_queue',消息,{持久性:真,強制性:真},功能(數據){的console.log(「消息發佈「);執行console.log(數據);});

我的問題是,當我發佈到已存在的隊列中時,發佈回調中,我們收到'false'響應,但是當我發佈到根本不存在的隊列時,在發佈回調,我們仍然得到'虛假'的迴應;爲什麼這樣?有什麼方法可以在發佈之前檢查隊列是否存在?

回答

0

試試看看這個代碼。

connection.exchange('Exchange', {type: 'topic', confirm: true,passive:true},function(exchange) { 
publish = exchange.publish(Queue, xml, { mandatory: false }); 
return true; 

});

+0

u能請解釋一下你正在嘗試在上述代碼做時使用queue_declare,但經過passive = true標誌? –

+0

有關您的實物信息,請查找以下內容:強制性參數默認爲false。如果消息不能被路由到隊列,該標誌告訴服務器如何反應。如果設置了該標誌,服務器將返回帶有Return方法的不可路由消息。如果此標誌爲false,則服務器將自動丟棄該消息。 –

+0

雖然這個代碼塊可能會回答這個問題,但最好能提供一些解釋爲什麼它會這樣做。 – PlasmaHH

1

這可以被認爲是一種反模式,即:大多數消息傳遞應用程序使用消息並忘記樣式,其中發佈者不關心誰接收消息。

現在,如果您需要確保郵件路由到某個隊列,那麼在發佈郵件時可以使用mandatory標誌。

要知道,如果一個隊列存在,您可以在發送queue.declare

相關問題