一個訂閱可能包含特殊字符,允許你一次定義多個主題。
主題層次分隔符被用來在主題中引入層次。多層的通配符和單層通配符可以被使用,但他們不能被使用來做發布者的消息。
1、主題層級分隔符/
/ 被用來分割主題樹的每一層,並給主題空間提供分等級的結構。當兩個通配符在一個主題中出現的時候,主題層次分隔符的使用是很重要的。
2、多層通配符#
# 是一個匹配主題中任意層次數的通配符。比如說,如果你訂閱了finance/stock/ibm/#,你就可以接收到以下這些主題的消息。
1、finance/stock/ibm
2、finance/stock/ibm/closingprice
3、finance/stock/ibm/currentprice
多層通配符有可以表示大於等於0的層次。因此,finance/#也可以匹配到單獨的finance,在這種情況下#代表0層。在這種語境下主題層次分隔符/就沒有意義了。因為沒有可以分的層次。
多層通配符只可以確定當前層或者下一層。因此,#和finance/#都是有效的,但是finance#不是有效的。多層通配符一定要是主題樹的最后一個字符。比如說,finance/#是有效的,但是finance/#/closingprice是無效的。
3、單層通配符+
+ 只匹配主題的一層。比如說,finance/stock/+匹配finance/stock/ibm和finance/stock/xyz,但是不匹配finance/stock/ibm/closingprice。另外,因為單層通配符只匹配1層,finance/+不匹配finance。
單層通配符可以被用於主題樹的任意層級,連帶多層通配符。它必須被用在主題層級分隔符/的右邊,除非它是指定自己。因此,+和finance/+都是有效的,但是finance+無效。單層通配符可以用在主題樹的末端,也可以用在中間。比如說,finance/+和finance/+/ibm都是有效的。
4、主題語法和用法
當你建立一個應用,設計主題樹的時候應該考慮以下的主題名字的語法和語義:
主題至少有一個字符長。
主題名字是大小寫敏感的。比如說,ACCOUNTS和Accounts是兩個不同的主題。
主題名字可以包含空格。比如,Accounts payable是一個有效的主題。
以/開頭會產生一個不同的主題。比如說,/finnace與finance不同。/finance匹配"+/+"和/+,但不匹配+
不要在任何主題中包含null(Unicode \x0000)字符。
以下的原則應用於主題樹的建造和內容
在主題樹中,長度被限制於64k內但是在這以內沒有限制層級的數目 。
可以有任意數目的根節點;也就是說,可以有任意數目的主題樹。
5、參考網站
http://blog.csdn.net/waltonhuang/article/details/52066908
6、原文地址
http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html#appendix-a