帶着新人學springboot的應用07(springboot+RabbitMQ 下)


  說一兩句廢話,強烈推薦各位小伙伴空閑時候也可以寫寫自己的博客!不管水平高低,不管寫的怎么樣,不要覺得寫不好或者水平不夠就不寫了(咳,我以前就是這樣的想法。。。自我反省!)。

  但是開始寫博客之后,你會發現很多你以為自己會的東西其實你並不會,然后你會經常在頭腦中不斷的搜索有關的片段,或者去別的大神博客里到處找有關的資料,最后領悟了屬於自己的東西!然后再寫出來和別人分享,別人也會給你點意見,你也會慢慢的改進。這不就是學習+復習+鞏固+創新+分享+改進的這么的一個過程嗎?

  以前看過曹雪芹的紅樓夢,讓我印象最深刻的就是開篇第一回兩句詩:“都雲作者痴,誰解其中味?”

  自從寫博客之后,我信了一句話:寫博客的好處誰寫誰知道!

  嘿嘿嘿,又在瞎說廢話了,回歸正題。

  上一節手動實現了RabbitMQ,要自己去點點點創建交換器、隊列,然后還要慢慢的綁定,那,能不能用程序去實現啊! 然后程序自己監聽,比如有一個監聽器直接監聽animal隊列,只要有消息丟到animal隊列中,監聽器就會直接從隊列中取數據放到java代碼中,反序列化成一個對象,然后我們就能快樂的使用這個對象了。

  這一節我們就用springboot簡單整合RabbitMQ,看看到底怎么用。

 

1.搭建環境

  創建一個springboot項目,RabbitMQ+WEB+版本1.5.17

 

2.RabbitMQ的簡單測試(可視化+代碼結合使用)

   注意,這里代碼內部導入的很多類一定要是amqp包下的

   還記得上節最后說了一個xxxTemplate嗎?這個模板就是RabbitTemplate,這個模板建立起來java程序操作RabbitMQ的橋梁,就像電視機和遙控器之間的關系。

  我先來說一種簡單的方式,就是交換器和隊列我們用可視化頁面去創建,用鼠標點點點,跟上一節一樣,然后我們只需要發送信息和設置監聽取消息就ok了。

  這是我上一節創建的交換器和隊列,都綁定好了,這個就不多說了,上一節說的很清楚了

 

  在springboot的配置文件中配置

 

   在主配置類開啟RabbitMQ消息中間件

 

 

  隨便寫個類,注解用@Component或者@Service行, 最重要的是@RabbitListener注解,這個注解就相當於一個監聽器,會一直監聽指定隊列的情況,只要這隊列有什么異動,就會跑過去拿消息放到方法形參內。

 

  用一個測試方法,模擬用戶,我這里是往direct交換器發消息,RoutingKey為animal,最終應該是將消息發給了animal隊列,然后被監聽器監聽,將消息放入形參Message中。

 

  好了,配置完成,可以使用了。

  其中要注意RabbitTemplate模板的使用方法(這個模板可以自動注入,原理后面大概看一下),自己可以查查資料, 可以自己試試每個方法。

  然后先運行springboot應用,沒輸出;

  運行測試方法模擬用戶向RabbitMQ發消息,控制台打印消息,成功。

 

  上面MyService中的方法形參是Message(試試Map行不行啊,我沒試過...),但是有的時候用對象比較方便,於是我們可以測試用對象接受數據

 

  運行后結果為:

 

  由此可見,可以直接從RabbitMQ中反序列化出對象。所以從隊列中取出消息,你可以直接誒用Message對象,好處是可以不用在意數據的類型,你還可以取到消息頭的一些信息,但是你得到數據還需要進一步處理才能變成對象。

  當然,如果你知道隊列中數據的類型的話你可以直接用該類去接收數據,這樣比較方便,后續用起來可以直接用。

  

3.用代碼創建交換器和隊列

  上面大概就介紹完了RabbitMQ的基本用法,但是就有的人說用可視化工具多lower啊,我是高手,我就要用代碼創建交換器和隊列,並且進行綁定。

  其實有時候還真有這樣的需求,需要用代碼臨時創建一個交換器和隊列,所以無論是為了體現出自己水平高深還是為了滿足一些需求,我們都要學會用java代碼實現創建交換器和隊列,並進行綁定。

  下面我們就來試試創建一個direct類型的交換器,名字叫"java-direct",再創建一個叫”java.queue“的隊列,然后將這兩個綁定,BindingKey為”java.queue“。

  我們會用到一個類amqpAdmin,這個類看名字就知道是個很了不得的類,這個就相當於RabbitMQ管理員的角色。可以刪除和創建RabbitMQ里的組件,declarexxx是創建組件,deletexxx是刪除組件

  其中,druable表示持久化(這里我設置隊列持久化),arguement表示一些消息頭參數,是一個map,用到的時候再看吧!

 

  然后運行這個測試方法,打開RabbitMQ可視化工具,可以看到如下結果:

   后面的用法我就不用多說了,和上面一樣,該監聽監聽,該怎么做就怎么做,不過可以試試指定其他的key測試測試啊!

 

4.消息轉化器

   還記得radis中的那個存到redis中的數據,我們看不懂嗎?這也就是所謂的亂碼,因為默認用jdk序列化的嘛!

  在RabbitMQ中也有類似的情況,假如我們RabbitMQ中的隊列中消息由於某種原因卡住了,我們要用可視化工具看看這些數據是些什么鬼,但是我們看到的是下圖這樣的:

  注:這里隊列中數據我用的是map,才能看到亂碼!如果用對象,這里什么也看不到。

 

  這是因為那個RabbitTemplate默認發消息會用一個消息轉換器,把我們要發送的消息換一種形態,但是這種形態不利於我們觀察,於是我們就自己定義一個消息轉換器,轉成json形態,我們在可視化工具里就看得懂了。

 

  然后我們看看可視化里的數據(這個時候map和對象都行,我用對象測試):

 

5.大概看看RabbitMQ的自動配置類

   其實原理沒什么好說的,和以前的套路一樣,找自動配置類。

  對了,很多小伙伴用springboot每整合一個新框架的時候,你要看一下這個新框架的基本配置,應該要知道首先就去對應的自動配置類里面找吧!

  但是,也有很多人可能會說:特么的,這么多自動配置類,我怎么知道去哪里找啊,再說了,這個類名字這么長,我也記不住啊!

  那我稍微提一下就以我們這個RabbitMQ為例:首先我們導入了RabbitMQ依賴,我們就能在jar包那里找到RabbitMQ或者amqp相關的東西(大家應該知道amqp和RabbitMQ之間的關系吧!其實就類似接口和實現類的關系)------------->然而並沒有找到spring.factories文件,說明自動配置類應該是springboot自己就有的,我們可以到那個自動配置類的spring.factories中去看看

 

 或者你也可以去下圖這個路徑看看(習慣了你都不用這樣找,直接ctrl+N,然后查找“新框架的名字+AutoConfiguration”,大概就能找到)

 

   自動配置類就找到了,一般自動配置類都會跟xxxProperties類放在一起,方便我們在配置文件控制參數,所以想要看看所有的能在配置文件配的參數,直接打開這個xxxProperties類,看看有什么屬性就ok了。

 

   然后打開自動配置類,看到這里

  

  也可以打開RabbitTemplate,看看默認消息轉換器是哪個,用什么規則去序列化消息的。

  

  點進去看看具體的序列化規則

 

  這個消息轉換器其實也就是這樣,我們再來繼續看看自動配置類里面

 

  不多說了,大概的看看就夠了,消息中間件之RabbitMQ就說這么多東西吧!給新手一個入門,也許其中很多東西說的不准確啊,那也沒辦法,我水平就這樣啊。。。不過很多細節還是要自己多練習啊,試試那個RabbitTemplate模板的很多方法,AmqpAdmin也有很多的方法;消息轉換器的一些知識還需要自己去查查啊。。。。

  咳,突然越寫就越覺得還有很多東西都沒說,很多細節問題!就這樣吧,下一節我看看能說點什么新的東西。。

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM