当前位置: 首页 > 知识库问答 >
问题:

绑定aws sqs区域骆驼

糜运良
2023-03-14

所以我尝试使用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>

共有2个答案

班宏毅
2023-03-14

假设这个问题。

第一:

要将属性添加到您的对象,我只需创建新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);

就这些!

袁英豪
2023-03-14

您的区域属性的值是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全局范围”)中的绑定中。这听起