Spring 4.1 @JmsListener 配置

标签 spring spring-annotations spring-jms

我想将 Spring 4.1 中提供的新注释和特性用于需要 JMS 监听器的应用程序。

我已仔细阅读 Spring 4.1 JMS improvements post 中的注释但我仍然想念 @JmsListenerDestinationResolver 之间的关系,以及我将如何设置应用程序以指示正确的 Destination端点.

这是@JmsListener 的建议用法

@Component
public class MyService {

    @JmsListener(containerFactory = "myContainerFactory", destination = "myQueue")
    public void processOrder(String data) { ... }
}

现在,我不能在我的实际代码中使用它,因为需要使用 Environment.getProperty() 从配置文件中读取“myQueue”。

我可以使用 DestinationResolver 设置适当的 myContainerFactory,但大多数情况下,如果您不需要 JNDI 在应用程序中查找队列,您似乎只需使用 DynamicDestinationResolver服务器,不需要做一些自定义回复逻辑。我只是想了解 Spring 如何希望我使用 @JmsListener 注释以参数化方式指示队列的名称。

在博客文章的后面,我找到了对这个配置器的引用:

@Configuration
@EnableJms
public class AppConfig implements JmsListenerConfigurer {

@Override
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
    registrar.setDefaultContainerFactory(defaultContainerFactory());

    SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
    endpoint.setDestination("anotherQueue");
    endpoint.setMessageListener(message -> {
        // processing
    });
    registrar.registerEndpoint(endpoint);
}

现在,这有一定的意义,我可以看到这将允许我在运行时从一些外部字符串设置目的地,但这似乎与使用 @JmsListener 冲突它似乎覆盖了上面代码中的 endpoint.setMessageListener 的注释。

关于如何使用 @JmsListener 指定适当队列名称的任何提示?

最佳答案

另请注意,根据用例,您已经可以使用每个环境的属性文件和 PropertySourcesPlaceholderConfigurer 进行参数化

@JmsListener(destinations = "${some.key}")

根据 https://jira.spring.io/browse/SPR-12289

关于Spring 4.1 @JmsListener 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25899940/

相关文章:

Spring MVC 表单不受模型对象支持

spring - 如何进行 Spring Autowiring ?

java - 如何使用故障转移传输处理 Activemq 的最大帧大小异常

java - 我们应该在连接工厂上调用 setClientId() 吗?

java - 如何在Spring Boot中从目标文件夹读取java文件

java - 如何从 Spring RestTemplate 中的对象获取列表

java - 无法使用 spring 检索属性

spring - 预授权错误处理

spring - @PropertySource 使用绝对路径以避免 "java.io.FileNotFoundException: Could not open ServletContext resource"

java - IBM MQ :Message is published as Binary but sending as String