Я пытался создать очень простой сервис отдыха с Jetty и Rest DSL, вот так:
Код: Выделить всё
package org.examples.routes.camelRestRoute;
import org.apache.camel.builder.RouteBuilder;
public class CamelRestRouteBuilder extends RouteBuilder {
@Override
public void configure() {
restConfiguration()
.component("jetty")
.host("localhost")
.port(8091);
rest("/api")
.get("/hello")
.to("direct:helloWorld");
from("direct:helloWorld")
.transform().simple("Hello, world");
}
}
Я искал во многих местах и не смог найти, в чем дело, примеры непосредственно из документации Apache Camel тоже не работали. Наконец я нашел работающий пример переполнения стека, закомментировал построчно, чтобы увидеть, что там необходимого, чего у меня не было, и оказалось, что имя моего прямого маршрута .routeId("Hello World!") имело решающее значение. Итак, теперь код выглядел так:
Код: Выделить всё
package org.examples.routes.camelRestRoute;
import org.apache.camel.builder.RouteBuilder;
public class CamelRestRouteBuilder extends RouteBuilder {
@Override
public void configure() {
restConfiguration()
.component("jetty")
.host("localhost")
.port(8091);
rest("/api")
.get("/hello")
.to("direct:helloWorld");
from("direct:helloWorld")
.routeId("helloWorld") // this is changed
.transform().simple("Hello, wolrd");
}
}
Для этого вы ДОЛЖНЫ использовать прямые конечные точки, и каждая конечная точка должна иметь уникальное имя для каждой службы.
Разве имена не генерируются автоматически? Далее в описании параметров вместо этого пишется:
Встроенные маршруты в rest-dsl, которые связаны с использованием прямых конечных точек. По умолчанию каждая служба в Rest DSL представляет собой отдельный маршрут. Это означает, что у вас будет как минимум два маршрута для каждой службы (rest-dsl и маршрут, связанный с rest-dsl). Включение этого параметра позволяет Camel оптимизировать и встроить его в единый маршрут. Однако для этого необходимо использовать прямые конечные точки**, которые должны быть уникальными для каждой службы**. По умолчанию этот параметр имеет значение false.
Поэтому даже не имена должны быть уникальными, а маршруты, и мои были уникальными.
Как мне отладить подобные вещи, если они не отображаются в журналах? Это не первый раз, когда у меня что-то не работает в Camel, и логи мне ничего не говорят, поэтому я хочу знать, как правильно это отладить.
Подробнее здесь: https://stackoverflow.com/questions/790 ... bug-routes