2015-02-05 53 views
3

兩個隊列綁定到具有下列路由密鑰的主題交換:路由消息不匹配的圖案

隊列A,與路由關鍵圖案匹配*.foo
隊列乙束縛,綁定路由鍵模式匹配*.bar

我想添加第三個隊列到此交換接收消息既不foo消息也bar消息。如果我用#路由密鑰綁定這個隊列,我自然會得到我需要的所有消息,但包括我不想要的foobar

任何路由消息修補模式NOT *.fooNOT *.bar

回答

5

如果要捕獲所有不匹配任何綁定的郵件,可以使用Alternate Exchange完成。

從備用交流添加存在一個替代的交流,並收集所有消息:

standard workflow --> [main exchange (topic)] 
        |  --> via binding *.foo --> [foo queue] 
        |  --> via binding *.bar --> [bar queue] 
        v  
      [alternate exchange (let it be topic too)] 
        --> via binding * --> [] 

對於更具體的情況下,當你有N個綁定,但你想趕上那不符合中號綁定的所有消息(其中M < N)它更成問題,但技術上可以通過Dead Letter Exchange完成,然後將其發佈到只有M個綁定的自定義交換,然後將其應用於Alternate Exchange。但它甚至聽起來很生疏,甚至沒有考慮到性能下降(只有在消息流量非常高的情況下才適用)。

+0

我建議*不要*使用AE,因爲添加一個新的綁定(即觀察者'#')將阻止AE/fallback工作。這是在現實生活中可能發生的事情,並且讓事物側身*真正*快速地發生意想不到的相互作用。 – user2864740 2017-02-06 21:33:56