1. 程式人生 > >Rabbitmq-direct演示

Rabbitmq-direct演示

mage erro bindings 磁盤空間 消息 error pub 完全匹配 dir

在上一節中我們創建了一個日誌系統。實現將日誌消息廣播給所有的cusumer。

在這片教程中,我們將為日誌系統添加一個功能:僅僅訂閱一部分消息。比如:我們可以直接將關鍵的錯誤類型日誌消息保存到日誌文件中,還可以同時將所有的日誌消息打印到控制臺。

綁定(binding)

  在之前的例子中,我們已經創建了綁定:

  channel.queueBind(queueName,EXCHANGE_NAME,"");

  一個綁定是建立在一個隊列和一個路由器之間的關系,可以解讀為:該隊列對這個路由器中的消息感興趣。

  綁定可以設置另外的參數:路由鍵(routing key)。為了避免和producer中的void basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body)中的routingKey混淆,我們將這裏的key稱為綁定鍵binding key,下面的代碼展示了如何使用綁定鍵來創建一個綁定關系:

  channel.queueBind(queueName,EXCHANGE_NAME,"black");

  綁定鍵的含義取決於路由器的類型,我們之前用的fanout類型交換機會忽略該值。

直接交換(Direct Exchange)

  我們之前的日誌系統會將所有消息廣播給所有消費者。現在我們想根據日誌的嚴重程度來過濾日誌。比如,我們想要一個程序來將error日誌寫到磁盤文件中,而不要將warning或info日誌寫到磁盤中,以免浪費磁盤空間。

  我們之前使用的fanout路由器缺少靈活性,它只是沒頭腦地廣播消息。所以,我們用direct路由器來替換它。direct路由器背後的路由算法很簡單:只有當消息的路由鍵routing key與隊列的綁定鍵binding key完全匹配時,該消息才會進入該隊列。

技術分享圖片

  直接交換機器x與兩個隊列綁定。第一個隊列以綁定鍵orange來綁定,第二個隊列以兩個綁定鍵black和green和交換機綁定。 按照這種設置,路由鍵為orange的消息以發布給交換機後,將會被路由到隊列Q1,路由鍵為black或者green的消息將會路由到隊列Q2。

多重綁定(Multiple bindings)

  技術分享圖片

  多個隊列以相同的綁定鍵binding key綁定到同一個Exchange上,是完全可以的。按照這種方式設置的話,直接路由器就會像fanout路由器一樣,將消息廣播給所有符合路由規則的隊列。一個路由鍵為black的消息將會發布到隊列Q1和Q2。

Rabbitmq-direct演示