2016-11-16 76 views
1

我構建假設提出股票實時報價基於消息的Web應用程序,動態更改隊列和路由鍵,RabbitMQ的

我選擇的RabbitMQ作爲我的消息總線,我有一個單一的交換,它利用流來自幾個流動性提供者的報價並根據路由密鑰將它們路由到相應的隊列。 然後報價被解析並顯示在屏幕上的相關小部件上。

這是Exchange和隊列結構 -

| exchange  | type | routing key  | queue    | 
|------------------------------------------------------------------| 
| quotes   | topic | NASDAQ.MSFT.500 | Widget1Id   | 
| quotes   | topic | NASDAQ.FB.1500 | Widget2Id   | 
| quotes   | topic | S&P500.ABT.200 | Widget3Id   | 
| quotes   | topic | S&P500.MMM.200 | Widget4Id   | 
| quotes   | topic | S&P500.MMM.500 | Widget5Id   | 

所以.. 問題開始時我想改變隊列的路由關鍵Widget1Id讓的S個& P500.ACN.200

我曾考慮過幾種選擇:

1. Delete Widget1Id queue and recreate is. 
2. Unbind the queue and bind it again using the new routing key 
    (makes me always save the old routing key) 

哪種方式最快?

最安全嗎?

會讓我減少更少的數據嗎?

如果您對我建立隊列和路由鍵的方式有任何意見,我很樂意聽到。

感謝提前

+0

你有沒有考慮其他框架,如http://zeromq.org/? – vtortola

回答

0

你提到會導致您的數據丟失,這兩個選項。我建議你要麼遵循方法2(在你解除綁定並重新綁定的地方)。另一種方法是創建一個新隊列,並將該隊列與新的路由鍵綁定到交換機,然後刪除現有隊列及其綁定。

0

另一種選擇是保持您的Widget1Id隊列,並將其第二次綁定到與S&P500.ACN.200路由密鑰進行的交換。這樣,Widget1Id將接收兩個路由密鑰的消息。準備好後,您可以刪除以前的綁定。

您不會丟失已在Widget1Id中排隊的消息,並且您不會丟失在解除綁定/重新綁定或重新創建隊列之間發佈的消息。

如果您想要更具體的示例,則在RabbitMQ文檔中的Tutorial 4中涵蓋了此場景。