上一節說了這么多廢話,看也看煩了,現在我們就來用鼠標點點點,來簡單玩一下這個RabbitMQ。
注意:這一節還是不用敲什么代碼,因為上一節我們設置了那個可視化工具,我們先用用可視化工具熟悉一下流程。
打開可視化頁面,http://localhost:15672
順便說一下RabbitMQ中的持持久化:這里持久化分為三種:消息持久化,交換器持久化,隊列持久化。。。
舉個例子,就簡單說說交換器持久化,其實就是為了防止將消息發到交換器了,但是RabbitMQ服務器突然暴斃,沒用了,那數據不就喪失了么?於是弄個持久化出來,可以將傳給交換器的數據存到硬盤里,即使RabbitMQ服務器沒用了,但是數據還在硬盤里啊,我們只需要維修好服務器就正常使用了。其他兩個持久化也類似,自己查查
首先,我們來創建三個交換器(direct,fanout,topic),每種類型來一個;
添加好了三個在這里
然后我們添加幾個隊列,跟上面基本一樣。
不過要注意一點:因為默認是將Queue的名字作為BindingKey,所以取名字的時候,用英語的句號分隔成多個單詞,類似”“hello.123"、"ddd.abc.aaa”,而且后面的模糊匹配也是根據這些單詞進行匹配的。
我新建四個隊列,animal animal.dog animal.cat black.dog
我新建的四個隊列:
下一步是干什么呢?肯定是將這些交換器和Queue綁定起來啊!下面圖中的這個RoutingKey就是指的是BindingKey,希望能夠知道,是為了方便理解,所以很多版本都叫做BindingKey,不然都叫做RoutingKey的話,初學者肯定一臉蒙逼,what?到底是哪個RoutingKey?有什么區別啊?
綁定direct交換器
綁定四次,這個交換器就綁定完成,再換下一個交換器(記住,topic這個可以模糊匹配的交換器綁定的時候有點特殊)
topic交換器綁定
由於可以支持模糊匹配,那么這個BindingKey可以是通配符#和*,其中#代表多個單詞,可以表示零個,* 代表一個單詞。
舉個例子,topic交換器和其中一個Queue綁定的BindingKey為“hello.#”,消息的RoutingKey為“hello.world”,那么這個消息就會傳給這個Queue一份。
ok,繼續綁定
fanout交換器綁定
其實這個交換器綁定BindingKey沒啥用,因為這個用的是廣播模式,只要是和這個交換器綁定的Queue,都會發一份消息給它
測試:
1.我們先給direct交換器發消息
進入direct交換器
然后切換到隊列,發現有數據到了,就在animal隊列中
2.給fanout交換器發消息
查看消息,隨意點開一個隊列,你也可以試試其他的
3.給topic交換器發消息
下面來手動測試一下消費者從隊列中取消息。
這里又要提一下一個東西:假如一個消費者從隊列中剛剛取到數據,啪一下,消費者那邊停電了或者退出了!而RabbitMQ中的Queue管你這么多啊,都看到從我這里拿數據了,於是就刪除了隊列中的數據,這樣數據就造成丟失了!
於是一些大牛就設計啊,當消費者從隊列中取到數據之后,Queue先不要刪除數據,必須等消費者那邊處理完這條數據然后回復Queue:“ok,我處理完了,你可以刪除數據了!”,然后Queue就刪除這條數據。
我們手動來測試這個過程:
點開那個animal隊列,
然后你再獲取數據,獲取一條,隊列就刪除一條,最后隊列顯示0條
這一節就用可視化工具手動的粗略測試了一下RabbitMQ的全過程,想必大家應該有了一個初步的認識,比上一節看了那么多廢話應該好了不少。
當然,我們在springboot程序中肯定不可能手動的去操作,這太麻煩了,我們會調用一個xxxTemplate(這個模板的套路應該都知道了,是spring慣用套路,之前的JdbcTemplate,HibernateTemplate,RedisTemplate應該還記得吧!)的東西來發送消息,然后消費消息也會有個類似監聽器的東西自動監聽,我們完全不用操心。
貫徹springboot的優點,盡量少的配置。
下一節我們說說springboot簡單整合RabbitMQ吧!對了,建議大家好好找找有關RabbitMQ的博客看看,因為知識點比較多,以及持久化,消息確認還有其他我沒說到的細節都好好看看,我也就只能說個大概的流程,具體的要實際用了才知道。