說一兩句廢話,強烈推薦各位小伙伴空閑時候也可以寫寫自己的博客!不管水平高低,不管寫的怎么樣,不要覺得寫不好或者水平不夠就不寫了(咳,我以前就是這樣的想法。。。自我反省!)。
但是開始寫博客之后,你會發現很多你以為自己會的東西其實你並不會,然后你會經常在頭腦中不斷的搜索有關的片段,或者去別的大神博客里到處找有關的資料,最后領悟了屬於自己的東西!然后再寫出來和別人分享,別人也會給你點意見,你也會慢慢的改進。這不就是學習+復習+鞏固+創新+分享+改進的這么的一個過程嗎?
以前看過曹雪芹的紅樓夢,讓我印象最深刻的就是開篇第一回兩句詩:“都雲作者痴,誰解其中味?”
自從寫博客之后,我信了一句話:寫博客的好處誰寫誰知道!
嘿嘿嘿,又在瞎說廢話了,回歸正題。
上一節手動實現了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也有很多的方法;消息轉換器的一些知識還需要自己去查查啊。。。。
咳,突然越寫就越覺得還有很多東西都沒說,很多細節問題!就這樣吧,下一節我看看能說點什么新的東西。。