JMS 命名空間支援
Spring 提供 XML 命名空間以簡化 JMS 配置。若要使用 JMS 命名空間元素,您需要參考 JMS Schema,如下列範例所示
<?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 Schema。 |
此命名空間包含三個頂層元素:<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 名稱。 |
|
要調用的處理器方法名稱。如果 |
|
要將回應訊息傳送到的預設回應目的地名稱。如果請求訊息未攜帶 |
|
持久訂閱的名稱(如果有的話)。 |
|
此監聽器的選用訊息選擇器。 |
|
要為此監聽器啟動的並行 Session 或消費者數量。此值可以是表示最大數量的簡單數字(例如, |
<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。當您使用持久訂閱時,必須指定它。 |
|
JMS 資源的快取層級: |
|
原生 JMS 應答模式: |
|
對外部 |
|
要為每個監聽器啟動的並行 Session 或消費者數量。它可以是表示最大數量的簡單數字(例如, |
|
要載入到單個 Session 中的最大訊息數。請注意,提高此數字可能會導致並行消費者飢餓。 |
|
用於接收呼叫的逾時時間(以毫秒為單位)。預設值為 |
|
指定要用於計算恢復嘗試之間間隔的 |
|
指定恢復嘗試之間的間隔,以毫秒為單位。它提供了一種方便的方法來建立具有指定間隔的 |
|
此容器應在其中啟動和停止的生命週期階段。值越低,此容器啟動得越早,停止得越晚。預設值為 |
使用 jms
Schema 支援配置基於 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 |
|
要為每個監聽器啟動的並行 Session 或消費者數量。它可以是表示最大數量的簡單數字(例如 |
|
要載入到單個 Session 中的最大訊息數。請注意,提高此數字可能會導致並行消費者飢餓。 |