Spring集成RabbitMQ-配置消息服務

AMQP協議是描述了有關消息服務器是如何配置我們經常提到的隊列(Queues)、交換器(Exchanges)以及綁定關系(Bindings),這個服務器也經常被稱為Broker。

在AMQP0.8版本以及更高版本都有一系列方便易用的方法來完成上面的這些聲明創建,他們都在AmqpAdmin接口下,而RabbitMQ也有基于AmqpAdmin的相應實現,即位于org.springframework.amqp.rabbit.core報下的RabbitAdmin。

AmqpAdmin

下面是AmqpAdmin接口的所有成員方法,其是在Spring AMQP的基礎上高度抽象出來的

image.png
  • getQueueProperties方法可以得到與queue相關的屬性信息比如消息個數以及消費者的個數等。這些在RabbitAdmin中都定義了相應的常量QUEUE_NAME、QUEUE_MESSAGE_COUNT、QUEUE_CONSUMER_COUNT(這段在官方API文檔表述有誤,將RabbitAdmin說成了RabbitTemplate

  • 無參函數declareQueue用于創建一個服務器分配好名字的queue,其他屬性都是采用默認值,即exclusive=true,autoDelete=true,durable=false

  • declareQueue(Queue queue)入參為一個隊列的對象,返回值為該隊列的隊列名稱。如果這個隊列的名稱就是一個空字符串,那么服務器就會為其生成一個名稱,但是不影響入參queue對象本身

  • 這里要注意,我們還有一個AnonymousQueue,匿名隊列是由框架默認通過UUID規則為其分配一個名字,相應的屬性也是exclusive=true,autoDelete=true,durable=false

  • 匿名隊列有個特性,就是即使服務掛了,當服務再次啟動的時候,它的名稱還會和原來一樣,但是前面說到的服務分配的聲明隊列就不會。

  • 另外,關于聲明隊列有一點,其必須要有一個固定的名字,因為這是用于標識這個隊列,同時也是方便在不同的綁定或者注冊到某上下文中標識自己,比如注冊到一個監聽器中

image.png

聲明RabbitAdmin
上面提到的AmqpAdmin的實現類RabbitAdmin主要用于創建隊列和交換器以及綁定關系等,其在XML中聲明方式如下

image.png

聲明Queue
在XML中聲明一個Queue很簡單
<rabbit:queue name="stocks.trade.queue"/>

除了聲明Queue的name屬性,還可以通過id屬性來標識queue。除此以外,還可以聲明queue的其他屬性信息比如x-message-ttl、x-ha-policy,借助<rabbit:queue-arguments>標簽即可

image.png

我們還可以在<rabbit:queue-arguments>標簽中定義不同類型的參數

image.png

在Spring Framework 3.2版本之后,我們可以使用下面更加簡潔的方式來聲明

image.png

忽略異常
默認情況下,RabbitAdmin如果遇到一處拋異常,那么RabbitAdmin就會直接停止服務,這種情況因為一處異常而影響了RabbitAdmin的正常運行,我們可以通過聲明ignore-declaration-exceptions屬性來解決這個問題,從這個屬性的命名就可以知道他的作用了。

在RabbitAdmin中,我們可以通過ignoreDeclarationExceptions這個屬性來設置。在1.6版本之前,這個屬性還只能作用與IOException,在該版本之后,該屬性作用于所有的異常情況,保證及時有一處因為某種原因拋異常,但是RabbitAdmin仍然能夠很好的工作,完成隊列、交換器等的聲明和定義。

實例

下面通過實例,來看看AMQP服務Broker是如何完成服務端和客戶端的聲明以及綁定等操作的,這里通過JAVA配置類的方式實現的。
先創建一個抽象類AbstractStockAppRabbitConfiguration配置類

image.png
  • 定義了ConnectionFactory,配置了連接服務的必要信息

  • 聲明了一個Jackson2JsonMessageConverter消息轉換器

  • 創建了RabbitTemplate,并注冊了上面的消息轉換器

  • 新建了一個TopicExchange

服務端聲明

image.png

客戶端聲明?********

image.png
  • 通過Value注入routingKey

  • 聲明了一個隊列

  • 將隊列與上面的TopicExchange進行了綁定,至此完成了所有的配置

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,807評論 18 139
  • 來源 RabbitMQ是用Erlang實現的一個高并發高可靠AMQP消息隊列服務器。支持消息的持久化、事務、擁塞控...
    jiangmo閱讀 10,377評論 2 34
  • 關于消息隊列,從前年開始斷斷續續看了些資料,想寫很久了,但一直沒騰出空,近來分別碰到幾個朋友聊這塊的技術選型,是時...
    預流閱讀 585,283評論 51 786
  • RabbitMQ詳解 本文地址:http://www.host900.com/index.php/articles...
    嘉加家佳七閱讀 2,528評論 0 9
  • 也許是到了這個年齡,有了一定的沉淀和感悟,心也足夠靜下來,便有了要寫出來與人分享的愿望。考慮到當今人們都很忙,很難...
    jianyi閱讀 399評論 0 0