首页 文章

camel消费者 endpoints url中的动态对象参数

提问于
浏览
0

我正在使用带 spring 的骆驼 . 我们的其中一条路由应该向动态选择的 endpoints 发送TCP消息 . 由于 endpoints 只是一个字符串,我知道我可以使用

.toD("netty4://...")

但问题是设置ssl参数 .

Netty组件将此定义为route url参数,因此它看起来像这样:

.toD("netty4://...?sslContextParameters=mySslContextParameters");

为了使这项工作,我有一个 beans :

@Bean
public SslContextParameters mySslContextParameters() {
    ...
    return sslContextParameters();
}

这将它绑定到这个单个bean实例,但我需要的是一个动态配置的bean,以便我可以根据从 生产环境 者获得的一些数据设置SSL的不同参数 .

我想要的是这样的东西(我知道这不是正确的骆驼语法),当我可以调用工厂方法并将一些参数传递给它时:

.toD("netty://...?sslContextParameters=${bean('mySslContestParameters(${exchange.param1}, ${exchange.param2}')}");

2 回答

  • 0

    您可以按照camel FAQ使用收件人列表EIP .

  • 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}"))
    

相关问题