@Component
public class MyJmsListener{
@Autowired
private MyService myService;
@JmsListener(destination="${queue.nameOne}")
void receiveMessageOne(Message message){
myService.process(message);
}
@JmsListener(destination="${queue.nameTwo}")
void receiveMessageTwo(Message message){
myService.process(message);
}
@JmsListener(destination="${queue.nameThree}")
void receiveMessageThree(Message message){
myService.process(message);
}
}
**我尝试使用 @Conditional(demoClass Implements Condition) 注释,这将使 bean 基于我的 demoClass 并且创建了 bean。问题是MyJmsListener类有三个@JmsListener,如果我不制作MyJmsListener类的bean,那么我所有的@JmsListener都会失效。 **我的查询是根据Spring Boot中的某些条件停止和启动@JmsListener。
我的理解是您希望 MyJmsListener 根据属性停止/开始侦听队列。为此,您可以使用 ConditionalOnProperty,如下所示:
@ConditionalOnProperty(前缀=“jms”,名称=“启用”,havingValue =“true”)
您必须声明 jms.enabled=true,您将获得所需的开关。
如果您需要在队列之间切换并一次只听一个,那么您需要将它们分成 3 个不同的 bean,并让它们基于类似于上面的属性启动。
要以编程方式执行此操作,您可以使用 JmsListenerEndpointRegistry
@RestController
@RequestMapping("/jms")
public class JmsListenerController {
@Autowired
ApplicationContext ctx;
@RequestMapping(value="/stop", method= RequestMethod.GET)
public @ResponseBody
String stopJmsListener() {
JmsListenerEndpointRegistry jmsRegistry=
ctx.getBean("jmsRegistry", JmsListenerEndpointRegistry.class);
jmsRegistry.stop();
return "Jms Listeners Stopped";
}
您可以创建类似的东西来启动应用程序。