我可以從外部代理(AWs IoT)測試pub/sub;從camel-example-spring-boot示例項目開始,並添加了camel-mqtt-starter。似乎一切正常,直到我嘗試定義mqtt路由。我有配置的SSLContext網址參數的問題:駱駝MQTT配置選項與豆值不工作的DSL路由URL參數
@Configuration
public class AppConfig {
@Bean(name="awsiotsslcontext")
SSLContext awsiotsslcontext(){
SSLContext sslContext = null;
try{
ClassLoader cl = this.getClass().getClassLoader();
InputStream is = cl.getResourceAsStream("/cert/myApp.cert.pem");
// You could get a resource as a stream instead.
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate caCert = (X509Certificate)cf.generateCertificate(is);
TrustManagerFactory tmf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(null); // You don't need the KeyStore instance to come from a file.
ks.setCertificateEntry("caCert", caCert);
tmf.init(ks);
sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
} catch (Exception e){
}
return sslContext;
}
}
然後在我的路線建設者:
@Component
public class SampleCamelRouter extends RouteBuilder {
@Autowired
SSLContext awsiotsslcontext;
@Override
public void configure() throws Exception {
from("timer://foo?repeatCount=0&delay=5000&fixedRate=true&period=10s")
.setBody(simple("TEST MESSAGE"))
.to("mqtt:awsiot?host=ssl://{{aws.iot.host}}:8883&publishTopicName={{aws.iot.sub.topic}}&sslContext=#awsiotsslcontext").log("Sent :"+body().convertToString().toString());
from("mqtt:awsiot?host=ssl://{{aws.iot.host}}:8883&subscribeTopicName={{aws.iot.sub.topic}}&sslContext=#awsiotsslcontext").log("Recieved : "+body().convertToString().toString());
}
}
得到以下錯誤:
java.lang.IllegalArgumentException異常:莫非沒有找到合適的setter 屬性:sslContext,因爲沒有使用相同的setter方法 類型:java.lang.String也沒有類型轉換:No typ E轉換器 可從類型轉換:java.lang.String中所要求的類型: javax.net.ssl.SSLContext與價值#awsiotsslcontext
我相信這是一個簡單的端點配置問題,而是想盡各種事情似乎沒有任何工作。使用bean名稱#應該有駱駝在註冊表中查找bean,但是在這裏它將它識別爲String?任何解決方法在這裏?