spring

spring

下一篇文章将演示如何将Spring JMS模板和DLMC与AmazonSQS API一起使用,以放置消息队列。

我为什么要使用Amazon SQS?

  1. 易于配置
  2. 跨平台支持
  3. 从您的自我冗余,连带和扩展担忧中赚钱。

为什么我不使用Amazon SQS?

  1. 如果延迟要求少于〜20 MS
  2. 每封邮件的费用约为0.00005 $

我遇到了一个很好的开源项目:Nevado,它以非常简洁的方式包装了Amazon SQS API。

将此添加到您的Maven依赖项:

<dependency>
 <groupId>org.skyscreamer</groupId>
 <artifactId>nevado-jms</artifactId>
 <version>1.2.4</version>
 </dependency>

现在,让我们配置Spring bean使其与AmazonSQS很好地集成:

1.连接工厂:

<bean id="sqsConnectorFactory" class="org.skyscreamer.nevado.jms.connector.amazonaws.AmazonAwsSQSConnectorFactory"/>

请注意,在此包装器中,我们需要设置aws.accessKey和aws.secretKey。 我们从AmazonSQS帐户门户获取这些密钥:

<bean id="connectionFactory" class="org.skyscreamer.nevado.jms.NevadoConnectionFactory">
 <property name="sqsConnectorFactory" ref="sqsConnectorFactory"/>
 <property name="awsAccessKey" value="${aws.accessKey}"/>
 <property name="awsSecretKey" value="${aws.secretKey}"/>

</bean>

2.创建队列

<bean id="myQueue" class="org.skyscreamer.nevado.jms.destination.NevadoQueue">
 <constructor-arg value="${aws.sqs.queue.name}"/>
 </bean>

3.创建Jms模板(稍后将在代码中注入它以发送消息):

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
 <property name="defaultDestinationName" value="${aws.sqs.queue.name}"/>
 <property name="connectionFactory" ref="cachedConnectionFactory"/>
 </bean>

4.添加监听器:

  • 4.a我正在使用SimpleMessageListenerContainer,它具有缓存连接,运行并发使用者,设置错误侦听器等功能。
    <bean id="simpleMessageListenerContainer" class="org.springframework.jms.listener.SimpleMessageListenerContainer">
     <property name="connectionFactory" ref="connectionFactory"/>
     <property name="messageListener" ref="listener"/>
     <property name="destination" ref="myQueue"/>
     <property name="errorHandler" ref="amazonMessageListener"/>
     <property name="concurrency" value="20"/>
     <property name="taskExecutor" ref="listenerThreadPoolTaskExecutor"/>
     </bean>
  • 4.b让我们为侦听器的执行者添加线程池:
    <bean id="listenerThreadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
     <property name="corePoolSize" value="70"/>
     <property name="maxPoolSize" value="70"/>
     <property name="daemon" value="true"/>
     <property name="keepAliveSeconds" value="60"/>
     </bean>
  • 4.c添加缓存连接支持:
    <bean id="cachedConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
     <property name="targetConnectionFactory" ref="connectionFactory"/>
     <property name="sessionCacheSize" value="10"/>
     </bean>
  • 4.d创建MessageAdapter来挂接所有内容,并将pojo设置为我们的消息监听器(amazonMessageListener):
    <bean id="listener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
     <property name="delegate" ref="amazonMessageListener"/>
     <property name="defaultListenerMethod" value="onMessage"/>
     <property name="defaultResponseDestination" ref="myQueue"/>
     </bean>
参考: AmazonSQS和SpringIdanFridman.com博客上提供了来自JCG合作伙伴Idan Fridman的消息队列

翻译自: https://www.javacodegeeks.com/2014/01/amazonsqs-and-spring-for-messaging-queue.html

spring

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐