2015-09-07 56 views
0

以下是我对aws sqs的弹簧配置。设置AWS SQS和ElasticBeanStalk环境

<bean id="CredentialsProviderBean" 
    class="com.myapp.util.ClasspathPropertiesFileCredentialsProvider" /> 

<bean id="ConnectionFactoryBuilder" 
    class="com.amazon.sqs.javamessaging.SQSConnectionFactory$Builder"> 
    <property name="regionName" value="us-east-1" /> 
    <property name="numberOfMessagesToPrefetch" value="1" /> 
    <property name="awsCredentialsProvider" ref="CredentialsProviderBean" /> 
</bean> 

<bean id="ConnectionFactory" class="com.amazon.sqs.javamessaging.SQSConnectionFactory" 
    factory-bean="ConnectionFactoryBuilder" factory-method="build" /> 

<bean id="Connection" class="javax.jms.Connection" factory-bean="ConnectionFactory" 
    factory-method="createConnection" init-method="start" destroy-method="close" /> 

<bean id="QueueName" class="java.lang.String"> 
    <constructor-arg value="myqueue" /> 
</bean> 

<bean id="amazonMessageListener" class="com.myapp.daemon.AsyncMessageListener" /> 

<bean id="messageListener" 
    class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> 
    <property name="delegate" ref="amazonMessageListener" /> 
    <property name="defaultListenerMethod" value="onMessage" /> 
    <property name="messageConverter"> 
     <null /> 
    </property> 
</bean> 

<bean id="jmsContainer" 
    class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
    <property name="connectionFactory" ref="ConnectionFactory" /> 
    <property name="destinationName" ref="QueueName" /> 
    <property name="messageListener" ref="messageListener" /> 
</bean> 

我无法理解如何在AWS中进行设置。

ElasticBeanStalk提供了两种类型的环境, 1. worker和2. webserver。根据文档,认为工人类型的环境符合法案要求。 AWS在ec2实例中部署守护进程,并从SQS中取消消息并将其封装到http post请求的消息主体中。此发布请求可用于发布到Web服务器。

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html#worker-environ

但是我写的成分做到这一点。从队列中取出消息,并进行一些后台处理。

在这种情况下,我应该选择哪种环境类型?

回答

0

如果您必须使用工作层,则不需要使用组件,并且确保应用程序的后台处理部分具有HTTP Post界面。您可以将轮询保留到beanstalk提供的守护进程。如果你想使用elasticbeanstalk,我会推荐这个。

如果你想使用你的组件,那么你可能只是使用web层,尽管如果你只是做后台处理和不提供Web流量,那么你将有端口监听Web流量,ELB没有理由。