我正在使用RabbitMQ構建一個系統。我希望能夠做的事情之一是根據記錄的消息的嚴重性將消息直接記錄到不同的隊列中。錯誤和異常應該到一個隊列立即處理; Trace跟蹤日誌等不太重要的消息應該到別的地方,所以它們不會堵塞關鍵日誌記錄。有沒有辦法在AMQP路由鍵中指定「不匹配」?
我想處理這個問題的方法是建立一個Topic交換並將兩個隊列綁定到交換。然後,我的日誌消息將使用其路由密鑰中的日誌級別發送到正確的隊列。但是,我有一個問題,我不知道設置路由密鑰的最佳方式。
將我的錯誤排入正確的隊列非常簡單 - 將兩個隊列綁定到交換機,一個使用Error
路由密鑰,然後將帶有Error
路由密鑰的消息發送給它。我希望發送給這個交換機的其他類型的消息轉到另一個隊列。但我認爲你不能描述像!Error
之類的路由鍵,或者至少它不會出現在我能看到的RabbitMQ教程或AMQP規範中。如果我使用通配符綁定,那麼我的錯誤消息會傳遞到兩個隊列。
它看起來像我可以使用備用交易所(http://www.rabbitmq.com/ae.html)做到這一點,但我寧願用直AMQP如果可能的話堅持和配置不良事件增加了複雜性的另一層我的系統 初始化。
我也可以在我的系統定義路由鍵每日誌級別,而不是Error
低級別的隊列明確路線的一切。但是這似乎過於冗長,並增加了維護開銷。
有沒有比使用AE更好的方式來實現我的目標?
的AE也失敗了/是一個貧窮的choce因爲任何的匹配就會阻止一個AE消息 - 觀察與另一個結合,等等,將改變交流的非常行爲預期的行爲。 – user2864740
從現在開始,鍵*必須*用於小的區分集合,並且這些*必須*被明確綁定:無論是或者無法'限制'綁定。這是非常不幸的,我很驚訝這沒有適當的解決方案。雖然有人會認爲它不是「AMQP 0-9-1」,但具有形成負值集的能力在真實代碼中非常非常方便。擁有更靈活的路由器非常方便,我很樂意交易更多的ms /消息。 – user2864740
(也就是說,不幸的是沒有可以應用於比賽的'後衛'條件:擴展可能能夠做到這一點?) – user2864740