JMS 名稱空間支援
Spring 提供了 XML 名稱空間,用於簡化 JMS 配置。要使用 JMS 名稱空間元素,您需要引用 JMS 模式,如以下示例所示
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jms="http://www.springframework.org/schema/jms" (1)
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/jms
https://www.springframework.org/schema/jms/spring-jms.xsd">
<!-- bean definitions here -->
</beans>
| 1 | 引用 JMS 模式。 |
該名稱空間包含三個頂級元素:<annotation-driven/>、<listener-container/> 和 <jca-listener-container/>。<annotation-driven/> 啟用 註解驅動的監聽器端點 的使用。<listener-container/> 和 <jca-listener-container/> 定義共享的監聽器容器配置,並且可以包含 <listener/> 子元素。以下示例顯示了兩個監聽器的基本配置
<jms:listener-container>
<jms:listener destination="queue.orders" ref="orderService" method="placeOrder"/>
<jms:listener destination="queue.confirmations" ref="confirmationLogger" method="log"/>
</jms:listener-container>
上述示例等同於建立兩個不同的監聽器容器 bean 定義和兩個不同的 MessageListenerAdapter bean 定義,如 使用 MessageListenerAdapter 中所示。除了上述示例中顯示的屬性之外,listener 元素還可以包含幾個可選屬性。下表描述了所有可用屬性
| 屬性 | 描述 |
|---|---|
|
宿主監聽器容器的 bean 名稱。如果未指定,則會自動生成一個 bean 名稱。 |
|
此監聽器的目標名稱,透過 |
|
處理程式物件的 bean 名稱。 |
|
要呼叫的處理程式方法的名稱。如果 |
|
用於傳送響應訊息的預設響應目標名稱。此屬性適用於請求訊息不包含 |
|
持久訂閱的名稱(如果有)。 |
|
此監聽器的可選訊息選擇器。 |
|
此監聽器啟動的併發會話或消費者數量。此值可以是表示最大數量的簡單數字(例如, |
<listener-container/> 元素也接受幾個可選屬性。這允許自定義各種策略(例如,taskExecutor 和 destinationResolver)以及基本的 JMS 設定和資源引用。透過使用這些屬性,您可以定義高度自定義的監聽器容器,同時仍然受益於名稱空間的便利性。
您可以透過 factory-id 屬性指定要公開的 bean 的 id,從而自動將這些設定公開為 JmsListenerContainerFactory,如以下示例所示
<jms:listener-container connection-factory="myConnectionFactory"
task-executor="myTaskExecutor"
destination-resolver="myDestinationResolver"
transaction-manager="myTransactionManager"
concurrency="10">
<jms:listener destination="queue.orders" ref="orderService" method="placeOrder"/>
<jms:listener destination="queue.confirmations" ref="confirmationLogger" method="log"/>
</jms:listener-container>
下表描述了所有可用屬性。有關各個屬性的更多詳細資訊,請參閱 AbstractMessageListenerContainer 及其具體子類的類級別 Javadoc。Javadoc 還討論了事務選擇和訊息重投方案。
| 屬性 | 描述 |
|---|---|
|
此監聽器容器的型別。可用選項包括 |
|
自定義監聽器容器實現類,以完全限定類名錶示。預設是 Spring 的標準 |
|
將此元素定義的設定公開為具有指定 |
|
對 JMS |
|
對 JMS 監聽器呼叫器的 Spring |
|
對用於解析 JMS |
|
對用於將 JMS 訊息轉換為監聽器方法引數的 |
|
對 |
|
此監聽器的 JMS 目標型別: |
|
響應的 JMS 目標型別: |
|
此監聽器容器的 JMS 客戶端 ID。當您使用持久訂閱時,必須指定此 ID。 |
|
JMS 資源的快取級別: |
|
原生 JMS 確認模式: |
|
對外部 |
|
為每個監聽器啟動的併發會話或消費者數量。它可以是表示最大數量的簡單數字(例如 |
|
載入到單個會話中的最大訊息數量。請注意,增加此數量可能會導致併發消費者飢餓。 |
|
用於接收呼叫的超時時間(以毫秒為單位)。預設值是 |
|
指定用於計算恢復嘗試之間間隔的 |
|
指定恢復嘗試之間的間隔,以毫秒為單位。它提供了一種方便的方式來建立具有指定間隔的 |
|
此容器應啟動和停止的生命週期階段。值越低,此容器啟動得越早,停止得越晚。預設值是 |
使用 jms 模式支援配置基於 JCA 的監聽器容器非常相似,如以下示例所示
<jms:jca-listener-container resource-adapter="myResourceAdapter"
destination-resolver="myDestinationResolver"
transaction-manager="myTransactionManager"
concurrency="10">
<jms:listener destination="queue.orders" ref="myMessageListener"/>
</jms:jca-listener-container>
下表描述了 JCA 變體的可用配置選項
| 屬性 | 描述 |
|---|---|
|
將此元素定義的設定公開為具有指定 |
|
對 JCA |
|
對 |
|
對用於解析 JMS |
|
對用於將 JMS 訊息轉換為監聽器方法引數的 |
|
此監聽器的 JMS 目標型別: |
|
響應的 JMS 目標型別: |
|
此監聽器容器的 JMS 客戶端 ID。在使用持久訂閱時需要指定。 |
|
原生 JMS 確認模式: |
|
對 Spring |
|
為每個監聽器啟動的併發會話或消費者數量。它可以是表示最大數量的簡單數字(例如 |
|
載入到單個會話中的最大訊息數量。請注意,增加此數量可能會導致併發消費者飢餓。 |