企業(yè)型網(wǎng)站建設(shè)咨詢電話百度搜索引擎網(wǎng)站
目錄
- 一、目的地類型
- 二、Exchange類型目的地
- 三、Queue類型目的地
- 四、AMQ Queue類型目的地
- 五、Topic類型目的地
一、目的地類型
在上節(jié) WebSocket的那些事(5-Spring STOMP支持之連接外部消息代理)中我們已經(jīng)簡(jiǎn)單介紹了各種目的地類型,如下圖:
這一節(jié)我們來(lái)詳細(xì)探討一下各種目的地類型的區(qū)別。
在MESSAGE
報(bào)文中請(qǐng)求頭destination
的格式如下:
- 發(fā)布到默認(rèn)交換機(jī)的消息目的地格式為:
/queue/queue_name
。 - 發(fā)布到
amp.topic
交換機(jī)的消息目的地格式為:topic/routing_key
。 - 其它所有消息目的地格式為:
/exchange/exchange_name/routing_key
。
如果隊(duì)列名、交換機(jī)名、路由key包含了/
、%
或者非ascii
字符,這些字符將會(huì)被替換為%dd
,dd
的意思是16進(jìn)制編碼。
二、Exchange類型目的地
任何exchange/queue或者exchange/routing-key的組合都可以通過(guò)前綴為/exchange
的目的地來(lái)訪問(wèn)。
對(duì)于SUBSCRIBE命令,目的地格式為:/exchange/<name>[/<pattern>]
,格式說(shuō)明如下:
- 在
name
交換機(jī)上創(chuàng)建一個(gè)排它,自動(dòng)刪除的隊(duì)列。 - 如果
<pattern>
有指定,則以<pattern>
為路由key綁定到名稱為name
的交換機(jī)上。
對(duì)于SEND命令,目的地格式為:/exchange/<name>[/<routing-key>]
,格式說(shuō)明如下:
- 通過(guò)
<routing-key>
發(fā)送消息到名稱為name
的交換機(jī)上。
備注:Exchange類型的目的地不適用于從已存在的隊(duì)列消費(fèi)信息。對(duì)于每個(gè)訂閱者都會(huì)創(chuàng)建一個(gè)新的隊(duì)列,并且通過(guò)指定的路由key綁定到指定的交換機(jī)。如果要消費(fèi)已存在隊(duì)列的消息,可以使用
/amq/queue
目的地。
三、Queue類型目的地
對(duì)于簡(jiǎn)單隊(duì)列,目的地格式為/queue/<name>
。
Queue類型目的地只會(huì)把消息傳遞給最多一個(gè)訂閱者,發(fā)送的消息如果沒(méi)有消費(fèi)者訂閱將會(huì)一直入隊(duì),直到訂閱者進(jìn)行消費(fèi)。
- 對(duì)于SUBSCRIBE命令,該類型目的地會(huì)創(chuàng)建一個(gè)共享的名稱為
name
的隊(duì)列。 - 對(duì)于SEND命令,名稱為
name
的共享隊(duì)列會(huì)在第一次發(fā)送消息到該類型的目的地時(shí)創(chuàng)建,消息將會(huì)根據(jù)路由keyname
發(fā)送到默認(rèn)交換機(jī)上。
四、AMQ Queue類型目的地
如果要發(fā)送或者訂閱不由STOMP適配器管理的已存在隊(duì)列的消息,消息目的地格式為/amq/queue/<name>
,說(shuō)明如下:
- 對(duì)于SEND和SUBSCRIBE命令,不會(huì)創(chuàng)建隊(duì)列。如果隊(duì)列不能存在,使用SUBSCRIBE隊(duì)列會(huì)報(bào)錯(cuò)。
- 對(duì)于SEND命令,消息會(huì)經(jīng)由默認(rèn)交換機(jī)直接發(fā)送已經(jīng)存在的名稱為
name
的隊(duì)列上。 - 對(duì)于SUBSCRIBE命令,針對(duì)已存在的名稱為
name
的隊(duì)列訂閱會(huì)基于當(dāng)前STOMP會(huì)話建立。
備注:如果沒(méi)有指定任何隊(duì)列參數(shù),隊(duì)列將會(huì)被認(rèn)定持久、非排它、非自動(dòng)刪除。
五、Topic類型目的地
STOMP客戶端用的最多的目的地類型就是/topic/<name>
,該類型的目的地可以路由消息到多個(gè)訂閱者,發(fā)送到Topic類型目的地的消息如果沒(méi)有訂閱者訂閱,將會(huì)被丟棄。
關(guān)于Topic類型目的地的格式說(shuō)明如下:
- 對(duì)于SEND命令,消息會(huì)通過(guò)路由key
<name>
發(fā)送到amp.topic
交換機(jī)上。 - 對(duì)于SUBSCRIBE命令,首先會(huì)創(chuàng)建一個(gè)自動(dòng)刪除和非持久化的隊(duì)列,然后會(huì)將該隊(duì)列通過(guò)路由key
<name>
綁定到amp.topic
交換機(jī)上。
可以通過(guò)stomp.default_topic_exchange
參數(shù)可以修改默認(rèn)Topic交換機(jī)的名稱,如下:
stomp.default_topic_exchange = some.exchange
更多關(guān)于目的地類型的說(shuō)明可以參考:RabbitMQ STOMP插件說(shuō)明。