此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
支持 JCA 消息端点
从 2.5 版开始,Spring 还提供了对基于 JCA 的支持MessageListener
容器。这JmsMessageEndpointManager
尝试
自动确定ActivationSpec
来自提供者的ResourceAdapter
类名。因此,通常可以提供
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>
或者,您可以设置一个JmsMessageEndpointManager
使用给定的ActivationSpec
对象。这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>
请参阅 javadocJmsMessageEndpointManager
,JmsActivationSpecConfig
,
和ResourceAdapterFactoryBean
了解更多详情。
Spring还提供了一个不与JMS绑定的通用JCA消息端点管理器:org.springframework.jca.endpoint.GenericMessageEndpointManager
.该组件允许
用于使用任何消息侦听器类型(例如 JMSMessageListener
) 和任何
特定于提供商ActivationSpec
对象。请参阅您的 JCA 提供商的文档,以
了解连接器的实际功能,并查看GenericMessageEndpointManager
javadoc 用于特定于 Spring 的配置详细信息。
基于 JCA 的消息端点管理与 EJB 2.1 消息驱动 Bean 非常相似。 它使用相同的基础资源提供程序协定。与 EJB 2.1 MDB 一样,您可以使用任何 消息侦听器接口,您的 JCA 提供程序在 Spring 上下文中也支持。 尽管如此,Spring 还是为 JMS 提供了显式的“方便”支持,因为 JMS 是 与 JCA 端点管理合同一起使用的最常见端点 API。 |