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.