当前位置: 首页 > 知识库问答 >
问题:

暂停和恢复骆驼路线

咸承教
2023-03-14

嗨,我在camel中有一个JMS消费者路由,我的要求是在特定事件时停止/暂停该路由(基于某个字段值),然后使用调度器恢复该路由。为此,我创建了两个路由,一个是我的原始jms消费者路由,另一个是调度程序路由,它们恢复jms消费者路由,虽然我能够暂停路由,但第二个路由不恢复暂停的路由,它显示的状态为已启动。

以下是我的两条路线

from("activeMQ:demo.audit.event1?testConnectionOnStartup=true&acknowledgementModeName=CLIENT_ACKNOWLEDGE")
    .routeId("javadslconsumer")
    .log("before stopping==="+new Date().toString())
    .process(new Processor() {
          @Override
          public void process(final Exchange exchange) throws Exception {
              try {
                  Route route = exchange.getContext().getRoute("javadslconsumer");
                  System.out.println("route.supportsSuspension()"+route.supportsSuspension());
                  exchange.getContext().suspendRoute("javadslconsumer",1l,TimeUnit.SECONDS);
                  // create another helper route, using which we can start or resume this route based 
                  // on the current life cycle phase of this route.    
              } catch (Exception e) {
                  // ignore
                  e.printStackTrace();
                }
            }
        })
    .log("after stopping logs==="+new Date().toString())
    .unmarshal(dataFormat)
    .beanRef("auditProcessor", "getErrorAuditDTO")
    .beanRef("auditProcessor", "processCreateAudit");   
from("timer:dlqscheduler?period=6000&fixedRate=true")
.process(new Processor(){
    @Override
    public void process(Exchange exchange) throws Exception {
        System.out.println("timer process started");
        try {
            exchange.getContext().resumeRoute("javadslconsumer");
            //exchange.getContext().startRoute("javadslconsumer");
        } catch (Exception e) {
            System.out.println("-----d-d-d-d-"+e.getMessage());
        }
        ServiceStatus serviceStatus  = getContext().getRouteStatus("javadslconsumer");
        System.out.println("serviceStatus.isStopped()"+serviceStatus.isStopped()); // showing false instead of true
        System.out.println("serviceStatus.isSuspended()"+serviceStatus.isSuspended()); // showing false instead of true
        System.out.println("serviceStatus"+serviceStatus);// showing started
    }       
})
.log("after resuming the route javadslconsumer");

请帮助我如何实现上述场景。

共有1个答案

郁烨
2023-03-14

你需要给它超过1秒的时间。这是一个后备超时,所以如果暂停不能在1秒内发生,它让路由运行。例如,阅读你使用的API的javadoc留档,你可以看到该信息。

顺便说一句,还有一个controlbus组件,因此您可以向endpoint发送消息以暂停/恢复路由。

  • http://camel.apache.org/controlbus
 类似资料:
  • 问题内容: 我有一个基本的Swing UI,带有一个标记为“播放”的按钮。按下按钮后,标签变为“暂停”。现在,当按下按钮时,它变为“继续”。 在“播放”中,我将实例化并执行一个SwingWorker。我想要的是能够暂停该线程(不要取消该线程),并根据上述按钮按下来恢复它。但是,我不想在doInBackground()中求助于Thread.sleep()。这似乎有点骇人听闻。有什么方法可以阻止运行d

  • 我要做的是暂停< code>KafkaConsumer,如果在使用消息的过程中出现错误。 这是我写的 然后我写了一个REST服务来恢复消费者 现在,我有两个问题。第一个问题:当我打电话给消费者时。来自<code>@KafkaListener</code>注释方法的pause()会发生什么?消费者立即暂停,或者我可以接收到同一主题分区的其他偏移量上的其他消息。例如,我有偏移量为3的“message1

  • 问题内容: 我在viewDidAppear中有一个图像,并用以下代码对其进行了动画处理: 我想在点击时暂停动画,如果再次点击它则继续播放动画。 问题答案: 暂停和恢复动画的2个功能,我从这里开始转换为Swift。 我有一个按钮可以暂停或恢复在中初始化的动画:

  • 有些情况下,例如爬取大的站点,我们希望能暂停爬取,之后再恢复运行。 Scrapy通过如下工具支持这个功能: 一个把调度请求保存在磁盘的调度器 一个把访问请求保存在磁盘的副本过滤器[duplicates filter] 一个能持续保持爬虫状态(键/值对)的扩展 Job 路径 要启用持久化支持,你只需要通过 JOBDIR 设置 job directory 选项。这个路径将会存储 所有的请求数据来保持一

  • 问题内容: 我一直在仔细研究Apache Camel文档,试图对它的两个 最基本 概念(端点和路由)有一个具体的了解,尽管这些术语在文档中各处都使用,但是我找不到真正定义它们的参考。是以及它们的用途。尽管它们的名称听起来很明显,而且我 想 我理解它们的含义,但是现在我已被分配到一项使我深深陷入Apache Camel Land的任务,而了解这些机制的绝对至关重要是。 我的猜测是,“端点”只是一个b