我想将 Spring 4.1 中提供的新注释和特性用于需要 JMS 监听器的应用程序。
我已仔细阅读 Spring 4.1 JMS improvements post 中的注释但我仍然想念 @JmsListener
和 DestinationResolver
之间的关系,以及我将如何设置应用程序以指示正确的 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}")
关于Spring 4.1 @JmsListener 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25899940/