跳到主要内容

支持 JCA 消息端点

ChatGPT-4o 中英对照 Support for JCA Message Endpoints

从 2.5 版本开始,Spring 还提供了对基于 JCA 的 MessageListener 容器的支持。JmsMessageEndpointManager 尝试从提供者的 ResourceAdapter 类名中自动确定 ActivationSpec 类名。因此,通常可以提供 Spring 的通用 JmsActivationSpecConfig,如下例所示:

@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;
}
java

或者,您可以使用给定的 ActivationSpec 对象设置一个 JmsMessageEndpointManagerActivationSpec 对象也可以通过 JNDI 查找(使用 <jee:jndi-lookup>)获取。以下示例展示了如何进行设置:

@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;
}
java

有关详细信息,请参阅 JmsMessageEndpointManagerJmsActivationSpecConfigResourceAdapterFactoryBean 的 javadoc。

Spring 还提供了一个通用的 JCA 消息端点管理器,它不依赖于 JMS: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。