我们有一个使用Spring Boot及其JMS工具的应用程序。在运行时,我们有不同的生产者在线跳转,并告诉我们的应用程序要侦听的主题或队列的名称。现在,我们有:
@JmsListener(destination = "helloworld.q")
public void receive(String message) {
LOGGER.info("received message='{}'", message);
}
当我们向helloworld.q
主题发送消息时,它会起作用。问题是,在运行之前我们不知道主题的名称是什么,而JmsListener
似乎想要一个常量表达式。
消息生成器将连接到我们的ActiveMQ实例,并广播一条消息,告诉我们需要开始侦听它们的主题,例如"Wasabi“、"WhitePaper”、"SatelliteMajor“、"BigBoosters”等。
我已经阅读了Spring文档,该文档解释了如何在运行时(某种程度上)侦听主题/队列:
@Configuration
@EnableJms
public class ReceiverConfig implements JmsListenerConfigurer {
@Override
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
endpoint.setId("myJmsEndpoint");
endpoint.setDestination("anotherQueue");
endpoint.setMessageListener(message -> {
// processing
});
registrar.registerEndpoint(endpoint);
}
// other methods...
}
我已经把它作为测试放到了我们的接收器配置中,当我们发送消息时,它确实会被调用。问题是,Spring让所有这些东西被自动调用,我们不知道在哪里以及如何给这个方法提供端点需要侦听的主题/队列的名称。此外,消息侦听器似乎永远不会被调用,但这是一个单独的问题;我相信,如果我们至少可以发送定制的主题或队列让它侦听,我们就可以解决这个问题。
我们使用的是Spring2.x。
https://stackoverflow.com/questions/56226984
复制相似问题