我尝试使用底部组件为几条驼峰路线设置https。目前的骆驼版本是2.19.4。代码来自一个最小的例子:
非https-setup看起来像这样:
// setup
restConfiguration()
.component("undertow")
.port(8888)
.contextPath("/api");
// routes
rest("/hello")
.get()
.to("direct:hello");
from("direct:hello")
.setBody(constant("Hello"));
rest("/world")
.get()
.to("direct:world");
from("direct:world")
.setBody(constant("World"));
到目前为止,此工作正常,我可以正常访问http://localhost:8888/api/hello
和http://localhost:8888/api/world
。
现在,我配置了自己的密钥库,创建了一个SSLContextParameters
对象,并将设置部分更改为:
UndertowComponent undertow = (UndertowComponent) getContext().getComponent("undertow");
undertow.setSslContextParameters(getSslConfig());
restConfiguration()
.component("undertow")
.port(8888)
.scheme("https")
.contextPath("/api");
路线与以前保持一致。现在,camel无法启动服务器,并出现以下错误:
[main] INFO org.apache.camel.impl.DefaultCamelContext - Route: route1 started and consuming from: https://0.0.0.0:8888/api/hello?httpMethodRestrict=GET
[main] INFO org.apache.camel.component.undertow.DefaultUndertowHost - Starting Undertow server on https://0.0.0.0:8888
[main] WARN org.apache.camel.component.undertow.DefaultUndertowHost - Failed to start Undertow server on https://0.0.0.0:8888, reason: java.net.BindException: Address already in use: bind
[main] INFO org.apache.camel.impl.DefaultCamelContext - Apache Camel 2.19.4 (CamelContext: camel-1) is shutting down
[main] INFO org.apache.camel.impl.DefaultShutdownStrategy - Starting to graceful shutdown 15 routes (timeout 300 seconds)
[Camel (camel-1) thread #18 - ShutdownTask] INFO org.apache.camel.component.undertow.DefaultUndertowHost - Stopping Undertow server on https://0.0.0.0:8888
[Camel (camel-1) thread #18 - ShutdownTask] INFO org.apache.camel.impl.DefaultShutdownStrategy - Route: route1 shutdown complete, was consuming from: rest://get:/hello?componentName=undertow&routeId=route1
但是,如果我删除一个端点,那么只剩下一条路线,一切都很好。显然:只针对那条路线。
如果我使用替代语法,也会发生同样的情况:
from("undertow:https://0.0.0.0:8888/api/hello?method=GET").to("direct:hello");
from("undertow:https://0.0.0.0:8888/api/world?method=GET").to("direct:world");
单个确定,多个路线失败。
我该如何解决这个问题? (顺便说一句:第一种语法是首选,因为一些常见的参数,如ports,tls-setup,scheme,base-path都保存在一个地方。真实的东西确实有一些路线,而不仅仅是两个。)
(在编写这个问题的最小例子时我注意到的另一个注意事项:这个问题似乎特定于下面。码头组件按预期工作。)
答案 0 :(得分:0)
在端口中设置一个零,但是您必须检查日志以查看分配了哪个端口号。