在 Apache Camel 中,"route()" 在 restful 声明中做什么?

In Apache Camel what does "route()" do in a restful declaration?

尝试 google 与 Camel 相关的“路由”就像尝试 google “the”。浏览文档也没找到,只有一个叫Route的接口。

继承了一些看起来像

的代码
        rest("/someRoute")
        .description("Some description")
        .consumes("text/plain")
        .produces("text/plain")
        .post()
        .route()
        .to("direct:toSomewhere");

route() 有什么作用?我试过使用和不使用 route(),但它似乎没有做任何事情。

使用 .route 允许您在您的 rest-definition 中定义新路线。如果您的路线很短,或者如果您只想 process/transform/validate 在将消息发送到您的实际消费者端点之前以某种方式发送消息,它会很方便。

例如

rest("/someRoute")
    .id("someRoute")
    .description("Some description")
    .post()
        .consumes("text/plain")
        .produces("text/plain")
        .route()
            .routeId("someRoutePost")
            .process(new SomeMessageProcessor())
            .to("direct:toSomewhere")
        .end()
    .endRest()
    .get()
        .route()
            .routeId("someRouteGet")
            .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(405))
            .setBody(constant("GET not allowed on this route"))
        .end()
    .endRest()

但是,如果您只想调用直接消费者端点并在那里执行这些操作,您可以这样做。

这完全取决于个人喜好。

thanks, I see if I wanted to say call .log() I would have to put .route() first

是的。 Camel 将 method-chaining 与它的 Java-DSL 一起使用,其中经常需要这样的东西。在定义 Rest 时,大多数方法 return RestDefinition 但如果你仔细观察 .route 方法 returns RouteDefition 相反。

要从路线返回 RestDefition,可以使用 .endRest(),因为示例中的 .end() 除了让您更容易看到 RouteDefition 的位置外,实际上没有做任何其他事情区块结束。