JCA 訊息端點支援
從 2.5 版本開始,Spring 還提供了對基於 JCA 的 MessageListener 容器的支援。 JmsMessageEndpointManager 嘗試根據提供者的 ResourceAdapter 類名自動確定 ActivationSpec 類名。因此,通常可以提供 Spring 的通用 JmsActivationSpecConfig,如以下示例所示
-
Java
-
Kotlin
-
Xml
@Bean
public JmsMessageEndpointManager jmsMessageEndpointManager(ResourceAdapter resourceAdapter,
MessageListener myMessageListener) {
JmsActivationSpecConfig specConfig = new JmsActivationSpecConfig();
specConfig.setDestinationName("myQueue");
JmsMessageEndpointManager endpointManager = new JmsMessageEndpointManager();
endpointManager.setResourceAdapter(resourceAdapter);
endpointManager.setActivationSpecConfig(specConfig);
endpointManager.setMessageListener(myMessageListener);
return endpointManager;
}
@Bean
fun jmsMessageEndpointManager(
resourceAdapter: ResourceAdapter, myMessageListener: MessageListener) = JmsMessageEndpointManager().apply {
setResourceAdapter(resourceAdapter)
activationSpecConfig = JmsActivationSpecConfig().apply {
destinationName = "myQueue"
}
messageListener = myMessageListener
}
<bean class="org.springframework.jms.listener.endpoint.JmsMessageEndpointManager">
<property name="resourceAdapter" ref="resourceAdapter"/>
<property name="activationSpecConfig">
<bean class="org.springframework.jms.listener.endpoint.JmsActivationSpecConfig">
<property name="destinationName" value="myQueue"/>
</bean>
</property>
<property name="messageListener" ref="myMessageListener"/>
</bean>
或者,您可以使用給定的 ActivationSpec 物件設定 JmsMessageEndpointManager。 ActivationSpec 物件也可以來自 JNDI 查詢(使用 <jee:jndi-lookup>)。以下示例展示瞭如何實現
-
Java
-
Kotlin
-
Xml
@Bean
JmsMessageEndpointManager jmsMessageEndpointManager(ResourceAdapter resourceAdapter,
MessageListener myMessageListener) {
ActiveMQActivationSpec spec = new ActiveMQActivationSpec();
spec.setDestination("myQueue");
spec.setDestinationType("jakarta.jms.Queue");
JmsMessageEndpointManager endpointManager = new JmsMessageEndpointManager();
endpointManager.setResourceAdapter(resourceAdapter);
endpointManager.setActivationSpec(spec);
endpointManager.setMessageListener(myMessageListener);
return endpointManager;
}
@Bean
fun jmsMessageEndpointManager(
resourceAdapter: ResourceAdapter, myMessageListener: MessageListener) = JmsMessageEndpointManager().apply {
setResourceAdapter(resourceAdapter)
activationSpec = ActiveMQActivationSpec().apply {
destination = "myQueue"
destinationType = "jakarta.jms.Queue"
}
messageListener = myMessageListener
}
<bean class="org.springframework.jms.listener.endpoint.JmsMessageEndpointManager">
<property name="resourceAdapter" ref="resourceAdapter"/>
<property name="activationSpec">
<bean class="org.apache.activemq.ra.ActiveMQActivationSpec">
<property name="destination" value="myQueue"/>
<property name="destinationType" value="jakarta.jms.Queue"/>
</bean>
</property>
<property name="messageListener" ref="myMessageListener"/>
</bean>
有關更多詳細資訊,請參閱 JmsMessageEndpointManager、 JmsActivationSpecConfig 和 ResourceAdapterFactoryBean 的 Javadoc。
Spring 還提供了一個不與 JMS 繫結的通用 JCA 訊息端點管理器:org.springframework.jca.endpoint.GenericMessageEndpointManager。此元件允許使用任何訊息偵聽器型別(例如 JMS MessageListener)和任何特定於提供者的 ActivationSpec 物件。請參閱您的 JCA 提供者文件以瞭解聯結器的實際功能,並參閱 GenericMessageEndpointManager Javadoc 以瞭解 Spring 特定的配置詳細資訊。
| 基於 JCA 的訊息端點管理與 EJB 2.1 訊息驅動 bean 非常相似。它使用相同的底層資源提供者契約。與 EJB 2.1 MDB 一樣,您也可以在 Spring 上下文中使用 JCA 提供者支援的任何訊息偵聽器介面。儘管如此,Spring 仍然為 JMS 提供了明確的“便利”支援,因為 JMS 是與 JCA 端點管理契約一起使用的最常見的端點 API。 |