|
此版本仍在开发中,尚未稳定。如需最新的稳定版本,请使用 Spring Framework 7.0.6! |
对 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>
或者,您可以使用给定的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>
查看 Javadoc 中 JmsMessageEndpointManager,
JmsActivationSpecConfig,
和 ResourceAdapterFactoryBean
以获取更多信息。
Spring 还提供了一个通用的 JCA 消息端点管理器,它不依赖于 JMS:
org.springframework.jca.endpoint.GenericMessageEndpointManager。此组件允许
使用任何消息监听器类型(例如 JMS MessageListener)和任何
提供商特定的 ActivationSpec 对象。有关您的连接器的实际功能,请参阅您的 JCA 提供商的文档,并查看
GenericMessageEndpointManager
Spring 特定的配置细节的 javadoc。
| 基于JCA的消息端点管理与EJB 2.1消息驱动Bean非常相似。 它使用相同的底层资源提供者契约。与EJB 2.1 MDB类似,你也可以在Spring上下文中使用JCA提供者支持的任何消息监听器接口。 然而,Spring仍然为JMS提供了明确的“便利”支持,因为JMS是与JCA端点管理契约一起使用的最常见端点API。 |