首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何停止/启动/暂停@JmsListener (干净的方式)

如何停止/启动/暂停@JmsListener (干净的方式)
EN

Stack Overflow用户
提问于 2015-09-15 22:12:48
回答 3查看 15.8K关注 0票数 12

我在我的项目上使用了Spring(引导),并且我使用以下命令访问JMS队列(ActiveMQ):

代码语言:javascript
运行
复制
@JmsListener(destination = "mydestinationQueue")
public void processMessage(String content) {
    //do something
}

它工作得很好,但我需要能够以编程方式停止/暂停/启动这个bean ( REST调用或类似的调用)。

当我停止或暂停这个bean时,我希望确保已经完全处理了当前消息。

对此有什么想法吗?

谢谢

EN

回答 3

Stack Overflow用户

发布于 2015-10-19 20:40:09

这是我找到的解决方案

代码语言:javascript
运行
复制
@RestController
@RequestMapping("/jms")
public class JmsController {

     @Autowired
     ApplicationContext context;

@RequestMapping(value="/halt", method= RequestMethod.GET)
public @ResponseBody
String haltJmsListener() {
    JmsListenerEndpointRegistry customRegistry =
            context.getBean("jmsRegistry", JmsListenerEndpointRegistry.class);
    customRegistry.stop();
    return "Jms Listener Stopped";
}

@RequestMapping(value="/restart", method=RequestMethod.GET)
public @ResponseBody
String reStartJmsListener() {
    JmsListenerEndpointRegistry customRegistry =
            context.getBean("jmsRegistry", JmsListenerEndpointRegistry.class);
    customRegistry.start();
    return "Jms Listener restarted";
}

@RequestMapping(value="/stopApp", method=RequestMethod.GET)
public @ResponseBody
String stopApp() {
    String[] args={};
    SpringApplication.run(FacturationApplicationFrontDaemon.class, args).close();
    return "stopped";
}

}
票数 15
EN

Stack Overflow用户

发布于 2015-09-16 00:06:43

有一个类型为JmsListenerEndpointRegistry (名称为org.springframework.jms.config.internalJmsListenerEndpointRegistry)的bean。

您可以从注册表(全部或按名称)访问JMS listener容器,并在所需的容器上调用stop();容器将在任何进程内消息完成处理后停止。

票数 9
EN

Stack Overflow用户

发布于 2018-10-10 16:17:03

代码语言:javascript
运行
复制
   private void stopJMSListener() {
       if(null == customRegistry){
           customRegistry = context.getBean(JmsListenerEndpointRegistry.class);
       }
        customRegistry.stop();
    }

   private void startJMSListener() {
       if(null == customRegistry){
        JmsListenerEndpointRegistry customRegistry = context.getBean(JmsListenerEndpointRegistry.class);
       }
        customRegistry.start();
    }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32588352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档