所以我尝试使用ApacheCamel访问简单队列服务。
JavaDSL方法很好,但我尝试使用xml配置。
private AmazonSQS sqs;
sqs = new AmazonSQSClient(credentials);
Region sqsRegion = Region.getRegion(Regions.US_WEST_2);
sqs.setRegion(sqsRegion);
上面的代码工作正常,但我决定构建bean。
<context:property-placeholder location="classpath:/default.properties" />
<bean name="sqsClient" class="com.amazonaws.services.sqs.AmazonSQSClient">
<constructor-arg>
<bean class="com.amazonaws.auth.BasicAWSCredentials">
<constructor-arg value="${access.key}"/>
<constructor-arg value="${secret.key}"/>
</bean>
</constructor-arg>
<property name="region" value="com.amazonaws.regions.Region"/>
</bean>
我犯了个错误
无法将[java.lang.String]类型的属性值转换为属性“Region”所需的[com.amazonaws.regions.Region]类型;嵌套的例外是java。lang.IllegalStateException:无法将[java.lang.String]类型的值转换为属性“Region”所需的[com.amazonaws.regions.Region]类型:找不到匹配的编辑器或转换策略
我没有找到任何关于通过Spring xml配置sqs的信息。有时我认为apache camel已经过时,或者没有人将其与sqs一起使用。此外,下一步是连接在JavaDSL实现中运行良好的扩展SQS库,但我不知道如何通过xml配置队列。
UPD:
感谢@jbird,我用这种方式解决了这个问题:
<context:property-placeholder location="classpath:/default.properties" />
<bean id="awsRegion" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="com.amazonaws.regions.RegionUtils"/>
<property name="targetMethod" value="getRegion"/>
<property name="arguments">
<list>
<value>${aws.region}</value>
</list>
</property>
</bean>
<bean name="sqsClient" class="com.amazonaws.services.sqs.AmazonSQSClient">
<constructor-arg>
<bean class="com.amazonaws.auth.BasicAWSCredentials">
<constructor-arg value="${access.key}"/>
<constructor-arg value="${secret.key}"/>
</bean>
</constructor-arg>
<property name="region" ref="awsRegion"/>
</bean>
所以,我刚刚解析了我的default.properties
文件,其中包含aws.key、aws.secret和区域设置。
我还有一个问题。Apache camel在加载路由器等之后停止运行。
[ main] SpringCamelContext INFO Route: route1 started and consuming from: Endpoint[aws-sqs://queue?amazonSQSClient=%23sqsClient]
[ main] SpringCamelContext INFO Total 1 routes, of which 1 are started.
[ main] SpringCamelContext INFO Apache Camel 2.17.2 (CamelContext: camel-1) started in 6.105 seconds
Process finished with exit code 0
路由器:
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
@Component
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("aws-sqs://queue?amazonSQSClient=#sqsClient")
.log("We have a message! ${body}")
.to("file:target/output?fileName=login-message-${date:now:MMDDyy-HHmmss}.json");
}
}
还有骆驼的背景。xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
">
<context:property-placeholder location="classpath:/default.properties" />
<bean id="awsRegion" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="com.amazonaws.regions.RegionUtils"/>
<property name="targetMethod" value="getRegion"/>
<property name="arguments">
<list>
<value>${aws.region}</value>
</list>
</property>
</bean>
<bean name="sqsClient" class="com.amazonaws.services.sqs.AmazonSQSClient">
<constructor-arg>
<bean class="com.amazonaws.auth.BasicAWSCredentials">
<constructor-arg value="${access.key}"/>
<constructor-arg value="${secret.key}"/>
</bean>
</constructor-arg>
<property name="region" ref="awsRegion"/>
</bean>
<!-- enable Spring @Component scan -->
<context:component-scan base-package="com.test.router"/>
<camelContext xmlns="http://camel.apache.org/schema/spring">
<contextScan/>
</camelContext>
</beans>
假设这个问题。
第一:
要将属性添加到您的对象,我只需创建新bean
<bean id="awsRegion" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="com.amazonaws.regions.RegionUtils"/>
<property name="targetMethod" value="getRegion"/>
<property name="arguments">
<list>
<value>${aws.region}</value>
</list>
</property>
</bean>
并创建引用
<property name="region" ref="awsRegion"/>
第二:
运行Apache Camel
Main main = new Main();
main.setApplicationContextUri("/META-INF/spring/camel-contex.xml");
main.run(args);
就这些!
您的区域
属性的值是String值"com.amazonaws.regions.区域"
。它期望的是类型com.amazonaws.regions.区域
的对象。因此,您需要引用区域
类型的对象,而不是提供String值。
本章涉及3个知识点,var、let、const,现在让我们了解3个关键字的特性和使用方法。 var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方声明的,都会提升到当前作用域的最顶部,这种行为叫做变量提升(Hoisting) 也就是说,如果在函数内部声明的变量,都会被提升到该函数开头,而在全局声明的变量,就会提升到全局作用域的顶部。 funct
除了可以使用类似 http://chengweiv5.gitbooks.io/test/content/index.html 地址访问用户的书籍外,还可以为每本书绑定域名,前提是用户有自己的域名。 这里继续以 test book 为例,将其绑定到 test.chengweiyang.cn,这样,用户就可以通过新的域名访问本书! 修改书籍的域名配置 首先,在书籍的属性页面找到 “Domain Nam
问题内容: 是否有用于解析绑定区域文件的python库?基本上,这将有助于添加/删除区域和记录。即使有人手动修改区域文件,这也需要起作用,因此每次覆盖区域文件都不是解决方案。 问题答案: 我无法将bicop用于此类经典区域文件: 我将看看dnspython
我有一个简单的路线,看起来像这样: CXF 配置也非常简单: 此简单路由失败,出现以下异常 这是消息历史记录,表明它在
当前的Cloud SQL实例可在以下位置获得:欧洲-West1比利时欧洲-West2伦敦欧洲-West3法兰克福 有什么方法可以找到我的GAE应用程序的其他位置细节,以便决定使用哪个云SQL位置?
对Nashorn中的ENGINE_作用域和GLOBAL_作用域绑定有点困惑,尝试跟随这里的讨论。 在阅读本文之前,我对作用域(至少在rhino中)的理解是,全局_作用域中有一个单独的共享绑定,引擎_作用域中有每个单独引擎的单独绑定。然而,这一页似乎在说,每个引擎都将基本的javascript结构存储在存在于engines engine_范围(混淆地称为“Nashorn全局范围”)中的绑定中。这听起