Я использую DSL для построения асинхронного процессора очередей.
Код маршрута выглядит примерно так:
from("seda://exportListQueue")
.setProperty("originalRequest", simple("${body}"))
.setHeader("CamelRedis.Key", Builder.simple("Something"))
.setHeader("CamelRedis.Value", Builder.simple("Some Json"))
.to("spring-redis://the_host:the_port?serializer=#stringSerializer") .setBody(exchangeProperty("originalRequest").convertTo(MyClass::class.java))
.process(queueProcessor)
.to("http4:some_url)
(Это, кстати, kotlin, но на самом делене имеет значения)
Конечно, я изменил имена, потому что не могу раскрыть неуниверсальные части.Моя проблема в том, что когда я пытаюсь запустить приложение, Camel немедленно останавливается.Журналы выглядят примерно так:
[INFO ] [2019-04-01 18:57:46,089] [] [] [o.a.c.l.i.Jdk14Logger->log:87] | Detected @ExceptionHandler methods in exceptionHandlerController
[INFO ] [2019-04-01 18:57:46,995] [] [] [o.a.c.l.i.Jdk14Logger->log:87] | Registering beans for JMX exposure on startup
[INFO ] [2019-04-01 18:57:46,998] [] [] [o.a.c.l.i.Jdk14Logger->log:87] | Bean with name 'dataSource' has been autodetected for JMX exposure
[INFO ] [2019-04-01 18:57:47,010] [] [] [o.a.c.l.i.Jdk14Logger->log:87] | Located MBean 'dataSource': registering with JMX server as MBean [com.zaxxer.hikari:name=dataSource,type=HikariDataSource]
[INFO ] [2019-04-01 18:57:47,079] [] [] [o.a.c.s.b.RoutesCollector->loadXmlRoutes:279] | Loading additional Camel XML routes from: classpath:camel/*.xml
[INFO ] [2019-04-01 18:57:47,080] [] [] [o.a.c.s.b.RoutesCollector->loadXmlRests:296] | Loading additional Camel XML rests from: classpath:camel-rest/*.xml
[INFO ] [2019-04-01 18:57:47,084] [] [] [o.a.c.i.DefaultCamelContext->start:3138] | Apache Camel 2.23.1 (CamelContext: RED) is starting
[INFO ] [2019-04-01 18:57:47,085] [] [] [o.a.c.i.DefaultCamelContext->doStartCamel:3312] | MDC logging is enabled on CamelContext: RED
[INFO ] [2019-04-01 18:57:47,085] [] [] [o.a.c.m.ManagedManagementStrategy->doStart:205] | JMX is enabled
[INFO ] [2019-04-01 18:57:47,249] [] [] [o.a.c.i.DefaultCamelContext->doStop:3496] | Apache Camel 2.23.1 (CamelContext: RED) is shutting down
[INFO ] [2019-04-01 18:57:47,256] [] [] [o.a.c.i.DefaultCamelContext->doStop:3596] | Apache Camel 2.23.1 (CamelContext: RED) uptime 0.171 seconds
[INFO ] [2019-04-01 18:57:47,256] [] [] [o.a.c.i.DefaultCamelContext->doStop:3597] | Apache Camel 2.23.1 (CamelContext: RED) is shutdown in 0.007 seconds
При ведении журнала с уровнем трассировки мы получаем корень проблемы:
[TRACE] [2019-04-01 19:01:06,419] [] [] [o.a.c.u.EventHelper->doNotifyEvent:1091] | Notifier: org.apache.camel.spring.boot.RoutesCollector$2@7dd847a2 is not enabled for the event: Failed to start Camel: RED due to Failed to create route route1 at: >>> To[spring-redis://the_port:the_host?serializer=#stringSerializer] <<< in route: Route(route1)[[From[seda://exporQueue]] -> [SetProperty... because of Failed to resolve endpoint: spring-redis://the_host:the_port?serializer=%23stringSerializer due to: No component found with scheme: spring-redis
В конце концов, это была просто отсутствующая зависимость.Но мой вопрос заключается в том, должен ли Кэмел дать мне исключение или хотя бы предупреждение, объясняющее, почему он закрывается более дружественным образом.
Я что-то упускаю или это действительно не красивое поведение верблюда, которое заслуживает билета?
--- EDIT ---
Это зависимости, связанные сзапуск
dependencies {
// spring web
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-jetty")
// cache
compile("org.springframework.boot:spring-boot-starter-cache")
// spring retry
compile("org.springframework.retry:spring-retry:1.1.5.RELEASE")
// monitoring
compile("org.springframework.boot:spring-boot-starter-actuator")
compile("org.springframework.boot:spring-boot-starter-logging")
// camel
compile('org.apache.camel:camel-spring-boot-starter:2.23.1')
compile('org.apache.camel:camel-spring-redis:2.23.1')
compile('org.apache.camel:camel-http4:2.23.1')
// eaio uuid
compile("com.eaio.uuid:uuid:3.2")
// apache
compile("org.apache.commons:commons-lang3:3.7")
compile("commons-codec:commons-codec:1.11")
compile("org.apache.httpcomponents:httpclient:4.5.3")
}