You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot通过JmsListenerEndpointRegistry停止JMS消费者报错咨询

问题原因

你代码中调用context.getBean("consumer", JmsListenerEndpointRegistry.class)时,Spring容器中名为consumer的Bean是你自定义的com.example.demo.Consumer类实例,并非JmsListenerEndpointRegistry类型,因此抛出类型不匹配的BeanNotOfRequiredTypeException异常。

JmsListenerEndpointRegistry是Spring JMS模块的核心组件,在你添加@EnableJms注解时,Spring会自动将该类型的Bean注册到容器中,无需自己创建。

正确实现方案

方案1:全局控制所有JMS消费者启停

直接注入JmsListenerEndpointRegistry实例,调用其stop()/start()方法即可控制所有JMS监听器的启停,修正后的JmsController代码如下:

@RestController
@RequestMapping("/jms")
public class JmsController {

    @Autowired
    private JmsListenerEndpointRegistry jmsListenerEndpointRegistry;

    @GetMapping(value = "/halt")
    public String haltJmsListener() {
        jmsListenerEndpointRegistry.stop();
        return "Jms Listener Stopped";
    }
    
    @GetMapping(value = "/start")
    public String startJmsListener() {
        jmsListenerEndpointRegistry.start();
        return "Jms Listener Started";
    }

}

方案2:精准控制单个JMS消费者启停

如果需要只启停指定的消费者,先给对应@JmsListener注解添加id属性标识监听器:

@Component
public class Consumer {
    // 为当前监听器指定唯一id
    @JmsListener(destination = "simple-jms-queue", id = "simpleQueueListener")
    public void listener(String msg) {
        System.out.println("Received Message : " + msg);
    }
}

再通过注册中心获取指定id的监听器容器单独控制:

@GetMapping(value = "/halt-simple")
public String haltSimpleJmsListener() {
    MessageListenerContainer container = jmsListenerEndpointRegistry.getListenerContainer("simpleQueueListener");
    if (container != null && container.isRunning()) {
        container.stop();
    }
    return "指定JMS监听器已停止";
}

@GetMapping(value = "/start-simple")
public String startSimpleJmsListener() {
    MessageListenerContainer container = jmsListenerEndpointRegistry.getListenerContainer("simpleQueueListener");
    if (container != null && !container.isRunning()) {
        container.start();
    }
    return "指定JMS监听器已启动";
}

补充说明

监听器停止后不会再消费队列中的新消息,重启后会自动消费停止期间积压的消息,符合常规的消费者启停需求。

内容的提问来源于stack exchange,提问作者Nital

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:06:07