AmazonSQS和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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值