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

用骆驼和石英的特定顺序安排路线2

李法
2023-03-14

我想用Apache Camel和Quartz2按spceific顺序设计路线。我定义了一个上下文,添加了两条路由:

public static void main(String args[]) throws Exception {
    CamelContext context = new DefaultCamelContext();
    context.addRoutes(new RouteBuilder() {
        @Override
        public void configure() {

            from("quartz2://myGroup/myTimerName?trigger.repeatInterval=2000&trigger.repeatCount=5").startupOrder(1).setBody().simple("Current time is "+new SimpleDateFormat("HH:mm:ss").format(new Date())).to("stream:out");
            //from("quartz2://myGroup/myTimerName?trigger.repeatInterval=2000&trigger.repeatCount=5").setBody().simple("Current time is ${header.firedTime}").to("stream:out");

        }
    });

    context.addRoutes(new RouteBuilder() {
        @Override
        public void configure() {

            from("quartz2://myGroup/myTimerName?trigger.repeatInterval=2000&trigger.repeatCount=5").startupOrder(2).setBody().simple("Current time is "+new SimpleDateFormat("HH:mm:ss").format(new Date())).to("file:C:\\Users\\milioli\\Documents\\NetBeansProjects\\CamelWithQuartz\\data\\out.txt");
        }
    });

    context.startAllRoutes();
    Thread.sleep(10000);
    context.stop();

}

代码构建和运行,但我没有来自控制台的反馈,我期待订单1的路由结果。此外,顺序为2的路由不会写入作为参数传递的文件。每条路线,采取单独正确运行。有人能帮帮我吗?

共有1个答案

林弘壮
2023-03-14

我建议您在开始编写代码之前创建单元测试,甚至将它们用于Camel路由的开发(只要您可以模拟endpoint)。

下面的测试表明,如果Quartz调度器的名称不同,则可以使用两个Quartz调度器:

package org.ruffp.camel.quartz;

import org.apache.camel.EndpointInject;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;

public class QuartzEndpointTest extends CamelTestSupport {

    @EndpointInject(uri = "mock:DESTINATION")
    private MockEndpoint mockDestination;

    @Test
    public void testQuartz() throws Exception {
        resetMocks();
        mockDestination.expectedMessageCount(3);
        Thread.sleep(10000);
        assertMockEndpointsSatisfied();
    }

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {

        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {

                //@formatter:off
                from("quartz2://myGroup/myTimerNameOne?trigger.repeatInterval=100&trigger.repeatCount=1")
                    .setProperty("test").constant("This is the job 1")
                    .to(mockDestination);

                from("quartz2://myGroup/myTimerNameTwo?trigger.repeatInterval=100&trigger.repeatCount=0")
                .setProperty("test").constant("This is the job 2")
                .to(mockDestination);

                //@formatter:on
            }
        };
    }
}

如果将两者的名称相同(例如MyTimerName),测试将不会通过,但是路由定义不会引发任何错误/异常。

 类似资料:
  • 问题内容: 我尝试对Apache骆驼路线进行junit测试。像这样的东西: 构建器类的定义如下 “ myExportRouteProcessor”类仅从JPA存储库中获取一些数据,并将结果放入路由。我想要的是在测试类中触发此路由,以检查整个过程是否正确完成。当前,处理器未启动。我该怎么办? 问题答案: 您可以使用AdviceWithRouteBuilder#replaceFromWith直接替换测

  • 我试着为阿帕奇骆驼路线做一个jUnit测试。类似于这样: builder类的定义如下 myExportRouteProcencer类只是从JPA存储库中获取一些数据,并将结果放入路由。我想要的是在测试类中触发此路由,以检查整个过程是否正确完成。目前,处理器没有被触发。我应该做些什么?

  • 我设置了一个endpoint,如下所示: 我用骆驼石英2.22.2和石英1.8.6 下面是从关闭到启动上下文的日志。

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

  • 我有一个Spring boot应用程序,其中包含几条camel路由,这些路由应该基于Quartz2的CronTrigger启动。由于某种原因,只有第一个计划的路由才会启动,但它是在最后一个计划的时间启动的。 路由一:mytime-1h 路由二:mytime 已配置导出路由:WeekProcessingRoute-Schedule:Quartz2:/cronTrigger?cron=041***?

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