骆驼MQTT配置选项DSL路由URL参数,Bean值不起作用



我试图从外部代理(AWs IoT(测试发布/订阅;启动了骆驼示例弹簧启动示例项目,并添加了骆驼-mqtt-starter。在我尝试定义 mqtt 路由之前,一切似乎都很好。我在配置 sslContext 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: 找不到合适的二传手 对于属性:sslContext,因为没有具有相同属性的 setter 方法 类型:java.lang.字符串 也可以进行类型转换:无类型转换器 可从类型:java.lang.String转换为所需的类型: javax.net.ssl.SSLContext with value #awsiotsslcontext

我相信这是一个简单的端点配置问题,但尝试了各种方法,似乎没有任何效果。拥有带有 bean 名称的 # 应该有 camel 在注册表中查找 bean,但在这里它将其识别为 String ?这里有任何解决方法吗?

这是骆驼路由配置的问题; 当我在@Configuration下配置我的路由而不是按照文档的建议配置@Component时,它不会抱怨 URI 中带有"#"的 bean 定义;我希望在 Spring 引导应用程序中,默认情况下,bean 会在路由之前加载:

@Bean
RouteBuilder awsIoTRoute() {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("timer://foo?repeatCount=0&delay=5000&fixedRate=true&period=17s")
.setBody(simple("TEST MESSAGE"))
.to("mqtt:awsIoTPublisher?host=ssl://{{aws.iot.host}}:8883&publishTopicName={{aws.iot.pub.topic}}&clientId={{aws.iot.pub.clientId}}&sslContext=#sslContext")
.log("Sent :"+body().convertToString().toString());
from("mqtt:awsIoTReciever?host=ssl://{{aws.iot.host}}:8883&subscribeTopicName={{aws.iot.sub.topic}}&clientId={{aws.iot.sub.clientId}}&sslContext=#sslContext").log("Recieved : "+body().convertToString());

}
};
}

相关内容

最新更新