選擇器
JMS 選擇器
選擇器是一種將過濾器附加到訂閱以執行基於內容的路由的方式。 選擇器使用 SQL 92 語法定義,通常應用於訊息標頭;無論是 JMS 訊息上可用的標準屬性,還是您可以透過 JMS 程式碼新增的自訂標頭。
這是一個範例
JMSType = 'car' AND color = 'blue' AND weight > 2500
有關選擇器的詳細說明,請參閱 javax.jmx.Message 上的參考資料。
ActiveMQ Classic 支援一些 JMS 定義的屬性,以及一些 ActiveMQ Classic 的屬性 - 請參閱訊息屬性 - 選擇器可以使用這些屬性。
使用 XPath 過濾訊息
當使用包含 XML 主體的訊息時,Apache ActiveMQ Classic 也支援基於 XPath 的選擇器。 若要使用 XPath 選擇器,請使用以下語法
XPATH '//title\[@lang=''eng''\]'
Xalan 相依性
XPath 支援需要 Xalan,它不是發行版的一部分。 Xalan jar 需要手動新增到 lib 目錄或透過 Maven 拉取到您的應用程式中
<dependency>
<groupId>xalan</groupId>
<artifactId>xalan</artifactId>
<version>2.6.0</version>
</dependency>
字串屬性轉換 / 根據 STOMP 訊息進行選擇
JMS 規範指出,當在選擇器中使用時,字串屬性不應轉換為數值。 因此,舉例來說,如果訊息的「age」屬性設定為字串「21」,則以下選擇器不應與其匹配:「age > 18」。由於 ActiveMQ Classic 支援 STOMP 客戶端,該客戶端只能發送帶有字串屬性的訊息,因此該限制有點限制性。如果您希望 JMS 選擇器自動將字串屬性轉換為適當的數字類型,只需在選擇器前面加上「convert_string_expressions:」即可。如果您將前面範例中的選擇器變更為「convert_string_expressions:age > 18」,則它將與該訊息匹配。