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 元素還可以包含幾個可選屬性。下表描述了所有可用屬性

表 1. JMS <listener> 元素的屬性
屬性 描述

id

宿主監聽器容器的 bean 名稱。如果未指定,則會自動生成一個 bean 名稱。

destination(必填)

此監聽器的目標名稱,透過 DestinationResolver 策略解析。

ref(必填)

處理程式物件的 bean 名稱。

method

要呼叫的處理程式方法的名稱。如果 ref 屬性指向 MessageListener 或 Spring SessionAwareMessageListener,則可以省略此屬性。

response-destination

用於傳送響應訊息的預設響應目標名稱。此屬性適用於請求訊息不包含 JMSReplyTo 欄位的情況。此目標的型別由監聽器容器的 response-destination-type 屬性決定。請注意,此屬性僅適用於具有返回值的監聽器方法,其中每個結果物件都會轉換為響應訊息。

subscription

持久訂閱的名稱(如果有)。

selector

此監聽器的可選訊息選擇器。

concurrency

此監聽器啟動的併發會話或消費者數量。此值可以是表示最大數量的簡單數字(例如,5),也可以是表示下限和上限的範圍(例如,3-5)。請注意,指定的最小值僅是提示,在執行時可能會被忽略。預設值由容器提供。

<listener-container/> 元素也接受幾個可選屬性。這允許自定義各種策略(例如,taskExecutordestinationResolver)以及基本的 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 還討論了事務選擇和訊息重投方案。

表 2. JMS <listener-container> 元素的屬性
屬性 描述

container-type

此監聽器容器的型別。可用選項包括 defaultsimpledefault102simple102(預設選項為 default)。

container-class

自定義監聽器容器實現類,以完全限定類名錶示。預設是 Spring 的標準 DefaultMessageListenerContainerSimpleMessageListenerContainer,具體取決於 container-type 屬性。

factory-id

將此元素定義的設定公開為具有指定 idJmsListenerContainerFactory,以便可以在其他端點中重用它們。

connection-factory

對 JMS ConnectionFactory bean 的引用(預設 bean 名稱是 connectionFactory)。

task-executor

對 JMS 監聽器呼叫器的 Spring TaskExecutor 的引用。

destination-resolver

對用於解析 JMS Destination 例項的 DestinationResolver 策略的引用。

message-converter

對用於將 JMS 訊息轉換為監聽器方法引數的 MessageConverter 策略的引用。預設是 SimpleMessageConverter

error-handler

ErrorHandler 策略的引用,用於處理在執行 MessageListener 期間可能發生的任何未捕獲異常。

destination-type

此監聽器的 JMS 目標型別:queuetopicdurableTopicsharedTopicsharedDurableTopic。這可能會啟用容器的 pubSubDomainsubscriptionDurablesubscriptionShared 屬性。預設是 queue(這將停用這三個屬性)。

response-destination-type

響應的 JMS 目標型別:queuetopic。預設值是 destination-type 屬性的值。

client-id

此監聽器容器的 JMS 客戶端 ID。當您使用持久訂閱時,必須指定此 ID。

cache

JMS 資源的快取級別:noneconnectionsessionconsumerauto。預設情況下(auto),快取級別實際上是 consumer,除非已指定外部事務管理器——在這種情況下,有效的預設值將是 none(假設 Jakarta EE 風格的事務管理,其中給定的 ConnectionFactory 是一個支援 XA 的池)。

acknowledge

原生 JMS 確認模式:autoclientdups-oktransactedtransacted 值啟用本地事務 Session。作為替代方案,您可以指定 transaction-manager 屬性,如表中稍後所述。預設是 auto

transaction-manager

對外部 PlatformTransactionManager 的引用(通常是基於 XA 的事務協調器,例如 Spring 的 JtaTransactionManager)。如果未指定,則使用原生確認(請參閱 acknowledge 屬性)。

concurrency

為每個監聽器啟動的併發會話或消費者數量。它可以是表示最大數量的簡單數字(例如 5),也可以是表示下限和上限的範圍(例如 3-5)。請注意,指定的最小值只是一個提示,在執行時可能會被忽略。預設值是 1。在主題監聽器或佇列順序重要的情況下,應將併發限制為 1。對於一般佇列,請考慮提高併發性。

prefetch

載入到單個會話中的最大訊息數量。請注意,增加此數量可能會導致併發消費者飢餓。

receive-timeout

用於接收呼叫的超時時間(以毫秒為單位)。預設值是 1000(一秒)。-1 表示沒有超時。

back-off

指定用於計算恢復嘗試之間間隔的 BackOff 例項。如果 BackOffExecution 實現返回 BackOffExecution#STOP,則監聽器容器不再嘗試恢復。設定此屬性時,recovery-interval 值將被忽略。預設值是一個 FixedBackOff,間隔為 5000 毫秒(即五秒)。

recovery-interval

指定恢復嘗試之間的間隔,以毫秒為單位。它提供了一種方便的方式來建立具有指定間隔的 FixedBackOff。有關更多恢復選項,請考慮指定一個 BackOff 例項。預設值是 5000 毫秒(即五秒)。

phase

此容器應啟動和停止的生命週期階段。值越低,此容器啟動得越早,停止得越晚。預設值是 Integer.MAX_VALUE,表示容器儘可能晚啟動,儘可能早停止。

使用 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 變體的可用配置選項

表 3. JMS <jca-listener-container/> 元素的屬性
屬性 描述

factory-id

將此元素定義的設定公開為具有指定 idJmsListenerContainerFactory,以便可以在其他端點中重用它們。

resource-adapter

對 JCA ResourceAdapter bean 的引用(預設 bean 名稱是 resourceAdapter)。

activation-spec-factory

JmsActivationSpecFactory 的引用。預設是自動檢測 JMS 提供者及其 ActivationSpec 類(請參閱 DefaultJmsActivationSpecFactory)。

destination-resolver

對用於解析 JMS DestinationsDestinationResolver 策略的引用。

message-converter

對用於將 JMS 訊息轉換為監聽器方法引數的 MessageConverter 策略的引用。預設是 SimpleMessageConverter

destination-type

此監聽器的 JMS 目標型別:queuetopicdurableTopicsharedTopicsharedDurableTopic。這可能會啟用容器的 pubSubDomainsubscriptionDurablesubscriptionShared 屬性。預設是 queue(這將停用這三個屬性)。

response-destination-type

響應的 JMS 目標型別:queuetopic。預設值是 destination-type 屬性的值。

client-id

此監聽器容器的 JMS 客戶端 ID。在使用持久訂閱時需要指定。

acknowledge

原生 JMS 確認模式:autoclientdups-oktransactedtransacted 值啟用本地事務 Session。作為替代方案,您可以指定稍後描述的 transaction-manager 屬性。預設是 auto

transaction-manager

對 Spring JtaTransactionManagerjakarta.transaction.TransactionManager 的引用,用於為每個傳入訊息啟動 XA 事務。如果未指定,則使用原生確認(請參閱 acknowledge 屬性)。

concurrency

為每個監聽器啟動的併發會話或消費者數量。它可以是表示最大數量的簡單數字(例如 5),也可以是表示下限和上限的範圍(例如 3-5)。請注意,指定的最小值只是一個提示,在使用 JCA 監聽器容器時通常在執行時被忽略。預設值是 1。

prefetch

載入到單個會話中的最大訊息數量。請注意,增加此數量可能會導致併發消費者飢餓。

© . This site is unofficial and not affiliated with VMware.