此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
支持 JCA 消息端点
从版本 2.5 开始, Spring 还提供了对基于 JCA 的MessageListener
容器。这JmsMessageEndpointManager
尝试
自动确定ActivationSpec
class name 来自提供程序的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
object 也可能来自 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>
请参阅 javadoc 以获取JmsMessageEndpointManager
,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 Endpoint Management 合同一起使用的最常见端点 API。 |