可以在驼峰中做到这一点: 2站在码头上的休息服务,首先是http(例如在端口1234上)和第二个https(例如在端口4321上),我该如何配置它?这可能吗?
我需要接收的效果(示例网址):
http://localhost:1234/firstHttpMethod
http://localhost:1234/secondHttpMethod
https://localhost:4321/firstHttpsMethod
https://localhost:4321/secondHttpsMethod
在我尝试添加2条路线时,只有第二条路线正常工作。如何解决这个问题(我想要做两个休息服务 - 首先是跳船,第二个是其他的,但不是很好的概念)。
代码如下所示:
camelContext.addRoutes(firstJettyBuilder());
camelContext.addRoutes(secondJettyBuilder());
protected RouteBuilder firstJettyBuilder()
{
return new RouteBuilder()
{
@Override
public void configure()
throws Exception
{
restConfiguration()
.component("jetty")
.host("localhost")
.port(42300)
.scheme("https")
.bindingMode(RestBindingMode.json)
.dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES")
.dataFormatProperty("json.in.enableFeatures", "FAIL_ON_NULL_FOR_PRIMITIVES");
configureSSL();
}
private void configureSSL()
{
final JettyHttpComponent jettyComponent = camelContext.getComponent("jetty", JettyHttpComponent.class);
final Map<String, Object> sslSocketConnectorProperties = new HashMap<>();
sslSocketConnectorProperties.put("keyStorePath", KEYSTORE);
sslSocketConnectorProperties.put("trustStorePath", KEYSTORE);
sslSocketConnectorProperties.put("keyStorePassword", KEYSTORE_PASSWORD);
sslSocketConnectorProperties.put("trustStorePassword", KEYSTORE_PASSWORD);
jettyComponent.setSslSocketConnectorProperties(sslSocketConnectorProperties);
}
};
}
protected RouteBuilder createPosJettyBuilder()
{
return new RouteBuilder()
{
@Override
public void configure()
throws Exception
{
restConfiguration()
.component("jetty")
.host("localhost")
.port(42302)
.scheme("http")
.bindingMode(RestBindingMode.json)
.dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES")
.dataFormatProperty("json.in.enableFeatures", "FAIL_ON_NULL_FOR_PRIMITIVES");
}
};
}
答案 0 :(得分:1)
简短的回答:我没有thnik这可能在同一个Camel上下文中,因为我可以调用bug的原因。它可能有不同的背景。
这是调试后的一些观察结果。
第一次尝试:如同问题一样。
Camel对两种配置使用相同的Jetty端点。第二个RouteBuilder将覆盖第一个端点配置。因此,预期的第一台服务器根本没有运行。
第二次尝试:多个Jetty端点。
可以尝试类似的东西(在创建Jetty端点并将它们添加到上下文之后):
this.restConfiguration("jetty")....
this.rest("/path").... // good
...
this.restConfiguration("jetty-tls")....
this.rest("/path").... // produces exception!
看起来其他定义已添加到Camel上下文中。在为第二个RouteBuilder创建路径时,第一个路由器的定义已经存在。 Camel想要创建具有相同路径的2条路由并抛出异常:
Failed to start route ... because of Multiple consumers for the same endpoint is not allowed: jetty:...
不幸的是,不能跳过其中一个构建器中的其余定义。
Bonus try:多个Jetty端点和不同的路径。
人们至少期望这一点起作用:
this.restConfiguration("jetty")....
this.rest("/path1").... // good
...
this.restConfiguration("jetty-tls")....
this.rest("/path2").... // good
此处没有例外,但Camel开始了3条路线!