之前的博客中我們可以在spring容器中構建 SimpleMessageListenerContainer 來消費消息,我們也可以使用 @RabbitListener 來消費消息。
定義消息處理器, @RabbitListener 註解標記的方法
應用啟動類, @EnableRabbit 啟用 @RabbitListener
測試:
控制臺打印:
如果發送的消息 content_type 的屬性是 text ,那麽接收的消息處理方法的參數就必須是 String 類型,如果是 byte[] 類型就會報錯。
控制臺報錯
總結
如果消息屬性中沒有指定 content_type ,則接收消息的處理方法接收類型是 byte[] ,如果消息屬性中指定 content_type為text ,則接收消息的處理方法的參數類型是 String 類型。不管有沒有指定 content_type ,處理消息方法的參數類型是Message都不會報錯。
步驟
具體的消息處理方法的參數是跟 MessageConverter 轉換後的java對象有關。
如果想要設置 MessageConverte r,則需要在 RabbitListenerContainerFactory 的實例中去設置,( setMessageConverter 方法)
獲取單壹個Header的屬性,Header還有其他的壹些屬性,比如 required , defaultvalue 等屬性,顧名思義:
配置文件:
啟動類:
定義mq中不存在的 Queue , exchange 和 route key
從上面的我們知道聲明必須容器中要有 RabbitAdmin 和 RabbitTemplate 實例
應用啟動類
測試驗證
控制臺打印:
說明自動聲明的綁定中的隊列被自動默認監聽。 @RabbitListener 註解中的 bindings 和 queues 參數不能同時指定,否則會報錯。
@RabbitListener 可以標註在類上面,當使用在類上面的時候,需要配合 @RabbitHandler 註解壹起使用, @RabbitListener 標註在類上面表示當有收到消息的時候,就交給帶有 @RabbitHandler 的方法處理,具體找哪個方法處理,需要跟進 MessageConverter 轉換後的java對象。
配置:
處理器方法
應用啟動類:
發送不包含content_type屬性的消息和content_type屬性為text的消息,控制臺打印:
@RabbitListener 註解的 containerFactory 屬性可以指定壹個 RabbitListenerContainerFactory 的bean,默認是找名字為 rabbitListenerContainerFactory 的實例。
當我們將 ConsumerConfig 類中的 RabbitListenerContainerFactory 實例的對象名改掉的時候,發現就會報錯。
此時控制臺上報錯,
此時如果配置壹下 @RabbitListener 註解的 containerFactory 屬性便不會報錯。
我們再去改造壹下在 RabbitListenerContainerFactory 實例中定義消息類型轉換器
User對象:
在處理器中增加參數是User的方法: