文章出處

上篇《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中,定義了一個消息類,用于存儲消息實體和消息的屬性信息。下面是該類的成員變量和方法
3217000081e4d1970e2e

  • 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。
321e000006c14bae4033

  • 通過方法名,我們就很清楚知道每個方法是干什么的,比如isDurable用于判定是否持久化了

  • getType方法用于得到該Exchange是那種類型,前面我們已經說過,Exchange的類型主要有Direct、Fanout、Topic和Headers四種,相應的,也有四個實現類集成了接口Exchange,他們分別是DirectExchange、FanoutExchange、TopicExchange和HeadersExchange

下面我們看看DirectExchange和Exchange的關系
32000000154e69b3bf3a

  • 這四個實現類都是繼承了抽象類AbstractExchange,而AbstractExchange也是Exchange的子類。
  • DirectExchange的源碼如下,我們可以看到其復寫了getType方法,并賦值為ExchangeTypes.DIRECT

Queue

Queue是用來存儲消息的,消費者從這里拿走消息并消費。與上面提到的Exchange類似,Spring-amqp中也是通過一個類Queue來定義了隊列。
320d00000a45a5a469f8

  • Queue有多種重載形式的構造函數,可以設置queue的名稱,是否持久化,是否自動刪除等等

  • 有一些判斷的函數,比如是否持久化了,是否設置了自動刪除等

Binding

我們應該還記得在原生的RabbitMQ中,Fanout模式下是如何綁定Exchange和Queue的
channel.queueBind(queueName, EXCHANGE_NAME, "");
在Spring-amqp中,即使是綁定映射,也單獨創建了一個類Binding
3217000090abc9b5dde2

  • 對于構造函數,后面我們通過幾個例子就可以知道每個參數表示的含義

  • 提供了一些函數用戶獲取綁定兩端Exchange和Queue的基本信息

Direct模式的綁定
new Binding(someQueue, someDirectExchange, "foo.bar")
Fanout模式的綁定
new Binding(someQueue, someFanoutExchange)
Topic模式的綁定
new Binding(someQueue, someTopicExchange, "foo.*")

如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!如果您想持續關注我的文章,請掃描二維碼,關注JackieZheng的微信公眾號,我會將我的文章推送給您,并和您一起分享我日常閱讀過的優質文章。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()