Spring整合RabbitMQ-必須知道的幾個概念
上篇《Spring整合RabbiMQ-Spring AMQP新特性》我們瞭解了最新spring-rabbit的2.0.0.M5版本相較於之前有哪些變化。其實使用Spring-amqp確實簡單,其主要就一些jar包,比如spring-amqp,spring-rabbit等。這篇就通過幾個基本概念來了解下Spring amqp和原生amqp在用法上有何不同。
訊息體
在《RabbitMQ入門》系列中,我們如果要傳送一條訊息,都是轉成位元組陣列的,類似這樣
channel.basicPublish("", QUEUE_NAME, null, "hello world".getBytes());
但是在spring-amqp中,定義了一個訊息類,用於儲存訊息實體和訊息的屬性資訊。下面是該類的成員變數和方法
getBody就是獲取訊息體的內容,相當於上面的“hello world”
getMessageProperties可以得到有關訊息本身的屬性資訊,比如messageId訊息的id標識,timestamp時間戳等等的值
使用這將上面屬性的值通過setHeader(String key, Object value)方法新增到訊息類中
Exchange
讀過《RabbitMQ入門》系列,想必對於Exchange應該就不會陌生。在RabbitMQ是實際上所有的訊息都不是生產者直接送到消費者,而是需要經過一道Exchange。Exchange接收傳送者傳送的訊息,並根據定好的路由規則將訊息派發到相應的佇列Queue中去,最終被訊息者消費。
在原生的RabbitMQ中,我們通過類似這樣的語句來指定需要使用哪種Exchange型別
channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT);
顯然,這裡宣告的是Fanout的exchange模式。同時,我們注意到這裡並沒有一個與Exchange直面相關的類,來設定響應的屬性。
在spring-amqp中,就針對Exchange單獨定義了一個介面Exchange。
通過方法名,我們就很清楚知道每個方法是幹什麼的,比如isDurable用於判定是否持久化了
getType方法用於得到該Exchange是那種型別,前面我們已經說過,Exchange的型別主要有Direct、Fanout、Topic和Headers四種,相應的,也有四個實現類整合了介面Exchange,他們分別是DirectExchange、FanoutExchange、TopicExchange和HeadersExchange
下面我們看看DirectExchange和Exchange的關係
- 這四個實現類都是繼承了抽象類AbstractExchange,而AbstractExchange也是Exchange的子類。
- DirectExchange的原始碼如下,我們可以看到其複寫了getType方法,並賦值為ExchangeTypes.DIRECT
Queue
Queue是用來儲存訊息的,消費者從這裡拿走訊息並消費。與上面提到的Exchange類似,Spring-amqp中也是通過一個類Queue來定義了佇列。
Queue有多種過載形式的建構函式,可以設定queue的名稱,是否持久化,是否自動刪除等等
有一些判斷的函式,比如是否持久化了,是否設定了自動刪除等
Binding
我們應該還記得在原生的RabbitMQ中,Fanout模式下是如何繫結Exchange和Queue的
channel.queueBind(queueName, EXCHANGE_NAME, "");
在Spring-amqp中,即使是繫結對映,也單獨建立了一個類Binding
對於建構函式,後面我們通過幾個例子就可以知道每個參數列示的含義
提供了一些函式使用者獲取繫結兩端Exchange和Queue的基本資訊
Direct模式的繫結
new Binding(someQueue, someDirectExchange, "foo.bar")
Fanout模式的繫結
new Binding(someQueue, someFanoutExchange)
Topic模式的繫結
new Binding(someQueue, someTopicExchange, "foo.")
如果您覺得閱讀本文對您有幫助,請點一下“喜歡”按鈕,您的“喜歡*”將是我最大的寫作動力!如果您想持續關注我的文章,請掃描二維碼,關注JackieZheng的微信公眾號,我會將我的文章推送給您,並和您一起分享我日常閱讀過的優質文章。
相關文章
- 【網路安全】你必須知道的幾個網路安全概念
- 這幾個python常用的庫你必須知道!Python
- LLM部署,你必須要知道的幾個技巧!
- 你必須知道的HTTP基本概念HTTP
- JS高階之面試必須知道的幾個點JS面試
- 配音技巧 | 學配音必須要知道的幾個技巧
- 學習Kali Linux必須知道的幾點Linux
- 新手入門:入手MacBook 後必須知道的 幾 個小技巧?Mac
- 關於Mysql事務,你必須知道的幾個知識點!MySql
- 學習java多執行緒,這必須搞懂的這幾個概念Java執行緒
- New的幾個問題 詳解 --讀你必須知道的.NET筆記筆記
- Vue開發必須知道的36個技巧Vue
- 你必須知道的 SmartSql !SQL
- Python有哪幾種編碼方式?這幾類必須知道!Python
- 理解大型分散式網站你必須知道這些概念分散式網站
- AppStore 中5個必須知道的基本設定APP
- C語言中你必須知道的幾大排序演算法C語言排序演算法
- CSS中那些必須掌握的概念CSS
- Python 這10個字典操作你必須知道Python
- Python入門必須知道的11個知識點Python
- 初學Python必須知道的11個知識點!Python
- 邊緣計算你必須知道的100個術語
- 自媒體實時熱點怎麼追?這幾個工具你必須知道!
- 5G大規模商用來臨之前,你必須知道的幾個知識點
- ?你必須知道的Java泛型Java泛型
- 前端必須知道的除錯工具前端除錯
- 【行業動態】使用動態ip軟體前,這幾個概念你必須弄懂!行業
- 關於人工智慧,必須知道這幾事情,歐能智慧人工智慧
- 漫談ElasticSearch關於ES效能調優幾件必須知道的事Elasticsearch
- 檔案管理,你必須要知道的三個要點
- Python常用的開源框架,這三個你必須知道!Python框架
- 前端設計師必須知道的10個重要的CSS技巧前端CSS
- 深度學習入門必須理解這25個概念深度學習
- 釋出新聞稿必須瞭解的幾個問題
- 人世間必須知道的做人道理
- 你必須要知道的babel二三事Babel
- 關於索引必須知道的知識索引
- 做一個好前端必須要知道的事——JS語言前端JS
- Spring第二天,你必須知道容器註冊元件的幾種方式!學廢它吊打面試官!Spring元件面試