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 物件設定 JmsMessageEndpointManagerActivationSpec 物件也可以來自 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>

有關更多詳細資訊,請參閱 JmsMessageEndpointManagerJmsActivationSpecConfigResourceAdapterFactoryBean 的 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。
© . This site is unofficial and not affiliated with VMware.