2012-08-03 24 views
0

我對Rabbitmq很陌生,我正在研究一箇中央路由器可以接收來自客戶端的消息,將其路由到目標並將響應發送給resquestor的系統客戶。多節點rabbitmq客戶機/服務器nodejs

基本上有3個模塊,每個模塊可以發送消息針對另一個模塊。我想該消息具有以下流程:

  • 模塊1將消息發送到路由器
  • 路由器將消息發送到單詞數(=模塊1的目標)
  • 單詞數過程中的消息,併發送一個響應路由器
  • 路由器轉發應答到Module(請求者)

RabbitMQ的似乎是一個很好的候選人,以這一點,但我不知道什麼是實現的最佳途徑。 REQ/REP方法更合適嗎?

回答

1

這聽起來像RPC

該鏈接的經典案例詳細(與Python)解釋RPC在RabbitMQ的是如何工作的。 RPC ClientRPC Server

但基本上,會發生什麼,從你上面的例子:

(從RPC客戶端)

模塊1將連接到RabbitMQ的經紀人(14/17),並宣佈獨家隊列(24) 它就會創建消息的basicproperties並設置REPLY_TO(26)(這是一個隊列名稱),然後將消息發佈到交換(28)

(從RPC服務器)

模塊3將訂閱來自模塊1的消息最終將進入的隊列,然後在收到消息時開始從該隊列消耗(40),它將處理它,然後重新發佈設置路由密鑰的結果給reply_to(38)然後你的消費者(Module1)將需要從它消費(參見rpc consumer line 42)

+0

感謝您的解釋。在這種情況下,module1是一個Web服務器,它接收HTTP請求,並且在向HTTP客戶端重新發送請求之前需要在工作人員上完成某些操作,您會推薦哪種方法? 「每個http請求基礎上」的req/rep是否是最好的? – Luc 2012-08-10 09:15:03

+0

我不太瞭解node.js來回答這個問題,這實際上取決於你在做什麼。請問node.js的'服務器應用程序'是隊列的生產者還是消費者?你真正想要的是讓你的網頁向服務器提交一份'工作',然後讓它檢查狀態,理想的情況就是必須有類似websocket的東西,這樣你的服務器就可以在沒有它的情況下回到網頁做出另一個請求 - 這是node.js可以做的事情嗎? – kzhen 2012-08-13 21:47:54