【问题标题】:Apache Camel quartz2 timer starting multiple exchangesApache Camel quartz2 计时器启动多个交换
【发布时间】:2020-01-23 21:08:07
【问题描述】:

我有一个应用程序,它创建路由以连接到 REST 端点并处理多个供应商的响应。每条路由都由一个quartz2 定时器触发。最近,当计时器触发时,它会创建多个交换,而不仅仅是一个,我无法确定是什么原因造成的。

创建路由的方法在这里:


    public String generateRoute(String vendorId) {

        routeBuilders.add(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                System.out.println("Building REST input route for vendor " + vendorId);
                String vendorCron = vendorProps.getProperty(vendorId + ".rest.cron");
                String vendorEndpoint =  vendorProps.getProperty(vendorId + ".rest.endpoint");
                String vendorAuth = vendorProps.getProperty(vendorId + ".rest.auth");
                int vendorTimer = Integer.valueOf(vendorId) * 10000;
                GsonDataFormat format = new GsonDataFormat(RestResponse.class);
                from("quartz2://timer" + vendorId + "?cron=" + vendorCron)
                        .routeId("Rte-vendor" + vendorId)
                        .streamCaching()
                        .log("Starting route " + vendorId)
                        .setHeader("Authorization",constant(vendorAuth))
                        .to("rest:get:" + vendorEndpoint)
                        .to("direct:processRestResponse")
                        .end();

            };
        });
        return "direct:myRoute." + vendorId;

一个示例'vendorCron'字符串是

"*+5+*+*+*+?&trigger.timeZone=America/New_York".

当石英路由触发时,我在日志中看到这种类型的输出

15:39| INFO | CamelLogger.java 159 | Starting route 4
15:39| INFO | CamelLogger.java 159 | Starting route 4
15:39| INFO | CamelLogger.java 159 | Starting route 4
15:39| INFO | CamelLogger.java 159 | Starting route 4
15:39| INFO | CamelLogger.java 159 | Starting route 4
15:39| INFO | CamelLogger.java 159 | Starting route 4
15:39| INFO | CamelLogger.java 159 | Starting route 4
15:39| INFO | CamelLogger.java 159 | Starting route 4
15:39| INFO | CamelLogger.java 159 | Starting route 4
15:39| INFO | CamelLogger.java 159 | Starting route 4

当我应该(并且曾经)只看到其中一个时。

有什么想法会导致这种情况吗?

谢谢!

【问题讨论】:

    标签: java spring-boot apache-camel quartz-scheduler


    【解决方案1】:

    这是因为你的vendorCron

    • 如果 Cron 触发器是每 5 秒一次,那么您会每 5 秒看到一次此日志。
    • 如果 Cron 触发器是每 5 分钟/小时一次,您会在 5 分钟/小时内看到这些登录。

    【讨论】:

    • 我没有意识到 vendorCron 字符串发布不正确 - 缺少星号 - 它实际上是 "*+5+*+*+*+?"我已经编辑了原始帖子来解决这个问题。
    【解决方案2】:

    我一直盯着看,以至于错过了显而易见的事情。我需要 0 在 cron 表达式的秒位置。

    感谢您的宝贵时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多