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 名稱。 |
|
要呼叫的處理程式方法名稱。如果 |
|
傳送響應訊息的預設響應目標名稱。當請求訊息不包含 |
|
持久訂閱的名稱(如果有)。 |
|
此監聽器的可選訊息選擇器。 |
|
為此監聽器啟動的併發會話或消費者數量。此值可以是一個表示最大數量的簡單數字(例如 |
<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 |
|
對 Spring |
|
對 |
|
對 |
|
對 |
|
此監聽器的 JMS 目標型別: |
|
響應的 JMS 目標型別: |
|
此監聽器容器的 JMS 客戶端 ID。使用持久訂閱時必須指定它。 |
|
JMS 資源的快取級別: |
|
原生 JMS 確認模式: |
|
對外部 |
|
為每個監聽器啟動的併發會話或消費者數量。可以是一個表示最大數量的簡單數字(例如 |
|
載入到單個會話中的最大訊息數。請注意,增加此數字可能會導致併發消費者的資源匱乏。 |
|
接收呼叫的超時時間(以毫秒為單位)。預設是 |
|
指定用於計算恢復嘗試間隔的 |
|
指定恢復嘗試之間的間隔,以毫秒為單位。它提供了一種方便的方式來建立具有指定間隔的 |
|
此容器應在其生命週期內啟動和停止的階段。值越低,此容器啟動得越早,停止得越晚。預設值是 |
使用 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 客戶端 ID。使用持久訂閱時需要指定它。 |
|
原生 JMS 確認模式: |
|
對 Spring |
|
為每個監聽器啟動的併發會話或消費者數量。可以是一個表示最大數量的簡單數字(例如 |
|
載入到單個會話中的最大訊息數。請注意,增加此數字可能會導致併發消費者的資源匱乏。 |