2016-10-12 151 views
0

我在春天使用駱駝。 我們的其中一條路由應該向動態選擇的端點發送TCP消息。 爲終點只是一個字符串,我知道我可以使用駱駝消費者端點中的動態對象參數url

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

但問題是設置SSL參數。

Netty的組件此定義爲路徑URL參數,所以它看起來是這樣的:

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

和使這項工作我有一顆豆:

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

這是綁定到這個單一的bean實例但我需要的是一個動態配置的bean,以便根據從生產者處獲得的一些數據設置SSL的不同參數。

我想什麼是這樣的(我知道這是不妥當的駱駝語法),當我可以調用一個工廠方法,並傳遞一些參數給它:

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

有你看着豆約束力? https://camel.apache.org/bean.html – Mechkov

+0

你能給我一個例子如何使用bean綁定,所以我將能夠傳遞參數,豆工廠方法? – bodziec

回答

0

您可以使用收件人列表EIP每camel FAQ

0

您可以使用收件人列表EIP每駱駝常見問題。

Thx史蒂夫,這是一個很好的建議。

我有一個類似的問題,我用你的建議,它的工作!

在我的駱駝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}"))