当前位置: 首页 > 知识库问答 >
问题:

带有https和undertow组件的Camel rest-dsl

左丘弘致
2023-03-14

我正在尝试使用undertow组件为一些驼峰路线设置https。当前的camel版本是2.19.4。代码来自一个简单的示例:

非https设置如下所示:

// 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/hellohttp://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

然而,如果我删除一个endpoint,只剩下一条路由,那么一切都会恢复正常。很明显:只有那条路线。

如果使用其他语法,也会发生同样的情况:

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");

单个路由正常,多个路由故障。

我该如何解决这个问题?(顺便说一句:首选语法,因为一些常见的参数,如port、tls-set、模式、基路径都保存在一个地方。真正的东西确实有比两个更多的路由。)

(我在讨论编写此问题的最小示例时注意到的另一句话:该问题似乎特定于下拖。码头组件按预期工作。)

共有1个答案

罗学真
2023-03-14

在端口中设置一个零,但您必须检查日志,以查看分配的端口号。

 类似资料:
  • 问题内容: 我们有一个有效的Apache mod_ssl配置。我想为Undertow启用HTTPS支持,以便它侦听http和https,从而消除了对Apache的需求。 我研究了Undertow的javadocs。Undertow.Builder类具有两个具有以下签名的addHttpsListener方法: 所以看来我可以在使用Builder API引导Undertow时使用它们,例如 我不确定如

  • 问题内容: 我正在尝试使用Git插件在Jenkins中配置Git项目。在项目配置页面中,我在Git配置中输入存储库URL,这是一个https URL(https://git.mycompany.com/git/MyProject.git)。但是,在构建项目时,出现以下错误: 我可以从命令行克隆存储库,也可以在Jenkins项目的预构建步骤中通过执行Shell命令来克隆存储库,因此我对插件配置为何不

  • 如何配置 基本上,我正在寻找的是Apache的mod_rewrite配置: 谢谢

  • 问题内容: 我有一个客户端服务器应用程序。我设法使他们使用SSl加密通过https连接 现在,我想同时使用http和https运行服务器。有什么可行的方法吗? 问题答案: 第一件事:不要使用flask中内置的Web服务器进行繁重的工作。您应该使用真实的Web服务器,例如apache(mod_wsgi)nginex + gunicore等。这些服务器包含有关如何同时运行http和https的文档

  • 我看了看线索,遵循了建议——这让我来到了这里...我使用WAMP-php rev 5.4.12(Win7) 代码尽可能简单:$result=file\u get\u contents(“https://g4apps.bliptrack.net/blipzones/report/publicdisplayapi.seam?display_id=dvp_vms4"); (此URL返回XML文件-在浏览

  • Undertow基本配置 由于 Jboot 是依赖 Jfinal-Undertow 进行开发的,因此 Jfinal-Undertow 的所有配置 Jboot 都会支持,Jfinal-Undertow 的配置文档在:https://www.jfinal.com/doc/1-4 其他扩展 扩展1:配置位置 在 Jboot 应用中,除了可以在 resource 目录下的 undertow.txt 文件进