如何手动启动Camel路由?

时间:2018-05-07 05:47:08

标签: java spring

我有一个设置为每五分钟运行一次的Camel路由

@Component
public class CamelRoute extends RouteBuilder{
    private final String comment = "Cron"

    @Override
    public void setup() {
        from("quartz2://myGroup/myTimerName?cron=0+0/5+12-18+?+*+MON-FRI")
        .log("Processing from"+comment)
        .to("activemq:Totally.Rocks");
    }
}

我想强制它从Spring http请求手动运行,并在CamelRoute中更改 comment 字段

@RequestMapping(value = "/ex/foos", method = RequestMethod.GET)
@ResponseBody
public String getFoosBySimplePath() {
     //TODO: Start Camel route
     //change camel log "comment" from "Cron" to "HTTP request"
}

2 个答案:

答案 0 :(得分:1)

我的任务解决方案很简单,但如果使用Camel文档则不简单:

  

startRoute 字符串 routeId)如果已经开始给定路线   以前停止了

我添加了另一条路线

from("timer://manualRestart?repeatCount=1")
    .routeId("manualRestart")
    .noAutoStartup()
    .to("activemq:Totally.Rocks");

并使用 startRoute()在需要时启动它

public String getFoosBySimplePath() {
    camelContext.startRoute("manualRestart");
}

为什么我发现它“不直截了当”?因为文档说,startRoute()可以启动先前停止的路由。 Route从未停止过,默认情况下配置为不启动。

答案 1 :(得分:0)

要手动运行Camel路线,您可以使用FluentProducerTemplate。您可以像普通bean一样自动装配实例。

示例:12

老实说,我不确定它是否适用于石英端点,但我确信它与“直接:”端点一起工作得很好。无论如何,这可能是你的发现的良好开端。