【发布时间】:2017-04-18 00:54:04
【问题描述】:
我目前正在使用 Camel 开发一个 Spring 应用程序,它将轮询 SQS 作为应用程序的入口点(第一条路线)。 我可以使用 Spring 的基于 XML 的方法成功地实现这一目标。
我的 AmazonSQSClient Bean:
<bean id="sqsClient" class="com.amazonaws.services.sqs.AmazonSQSClient">
<constructor-arg ref="sqsCredentialsProvider" />
<property name="endpoint" value="${aws.sqs.endpoint}" />
</bean>
我的骆驼之路:
<route id="pollMessages">
<from id="sqsEndpoint" uri="aws-sqs://{{queue.name}}?amazonSQSClient=#sqsClient&deleteAfterRead=false" />
<to uri="direct:readSQSMessage" />
</route>
在这一点上,使用上述方法一切正常。
现在我正在尝试将我所有的 bean 和 Camel 配置迁移到基于 Java 的方法。
我创建了我的 Amazon SQS 客户端 Bean,如下所示:
@Bean
public AmazonSQS sqsClient(){
ClientConfiguration clientConfiguration = new ClientConfiguration();
AmazonSQSClient client = new AmazonSQSClient(sqsCredentialsProvider(), clientConfiguration);
client.setEndpoint(sqsEndpoint);
return client;
}
而且,我正在创建的骆驼路线(sn-p)看起来像:
@Bean
public CamelContext camelContext() throws Exception{
CamelContext camelContext = new DefaultCamelContext();
camelContext.addRoutes(new RouteBuilder() {
@Override
public void configure() {
from("aws-sqs://"+fulfillmentQueueName+"?amazonSQSClient=#sqsClient&delay="+fulfillmentQueuePollInterval)
.to("direct:parseSQSMessage");
}
});
camelContext.start();
return camelContext;
}
但是,我在使用这种方法时遇到了错误:
java.lang.IllegalArgumentException:找不到合适的属性设置器:amazonSQSClient,因为没有相同类型的设置器方法:java.lang.String,也无法进行类型转换:没有可用于从类型转换的类型转换器: java.lang.String 到所需类型:com.amazonaws.services.sqs.AmazonSQS,值为#sqsClient
我阅读了here如何构建Java风格的骆驼路线
我读到 here 我需要将 AWS 客户端绑定到注册表 (registry.bind),但我无法在除 JNDI 之外的任何注册表上找到绑定方法
我也试过了:
SimpleRegistry registry = new SimpleRegistry();
registry.put("sqsClient", sqsClient());
CamelContext camelContext = new DefaultCamelContext(registry);
但遇到同样的错误。
我进行了很多搜索并尝试阅读,计划继续做更多但我无法找到任何完整的示例来做我需要做的事情。片段在这里很有帮助。
非常感谢任何帮助。谢谢
【问题讨论】:
标签: java spring amazon-web-services apache-camel amazon-sqs