我正在使用春天的骆驼。 我们的其中一条路由应该向动态选择的端点发送TCP消息。 由于端点只是一个字符串,我知道我可以使用
.toD("netty4://...")
但问题在于设置ssl参数。
Netty组件将此定义为路由url参数,因此它看起来像这样:
.toD("netty4://...?sslContextParameters=mySslContextParameters");
为了完成这项工作,我有一个bean:
@Bean
public SslContextParameters mySslContextParameters() {
...
return sslContextParameters();
}
这将它绑定到这个单个bean实例,但我需要的是一个动态配置的bean,以便我可以根据从生产者那里获得的一些数据设置SSL的不同参数。
我想要的是这样的东西(我知道这不是正确的骆驼语法),当我可以调用工厂方法并将一些参数传递给它时:
.toD("netty://...?sslContextParameters=${bean('mySslContestParameters(${exchange.param1}, ${exchange.param2}')}");
答案 0 :(得分:0)
您可以按照此camel FAQ使用收件人列表EIP。
答案 1 :(得分:0)
史蒂夫,这是一个很好的建议。您可以根据此骆驼常见问题解答使用收件人列表EIP。
我有一个类似的问题,我使用了你的建议,这是有效的!
在我的camel-context.xml中,我定义了两个sslContextParameters
...
<camel:sslContextParameters id="firstSsl">
<camel:keyManagers keyPassword="changeit">
<camel:keyStore resource="/test/client.keystore.jks" password="changeit" />
</camel:keyManagers>
<camel:trustManagers>
<camel:keyStore resource="/test/client.truststore.jks" password="changeit" />
</camel:trustManagers>
</camel:sslContextParameters>
<camel:sslContextParameters id="secondSsl">
<camel:keyManagers keyPassword="otherpassword">
<camel:keyStore resource="/test/other-keystore.jks" password="otherpassword" />
</camel:keyManagers>
<camel:trustManagers>
<camel:keyStore resource="/test/other-truststore.jks" password="otherpassword" />
</camel:trustManagers>
</camel:sslContextParameters>
...
在我的routeBuilder中
.setHeader("sslContext", constant("firstSsl"))
//or
.setHeader("sslContext", constant("secondSsl"))
...
.recipientList(simple("https4://override/?bridgeEndpoint=false&sslContextParametersRef=${headers.sslContext}"))