国家重大建设项目库网站,ui在线设计工具,市场营销策划方案范文,重庆 网站开发在我之前的文章中#xff0c;我展示了一个简单的示例#xff0c;该示例如何将AWS SQS与Spring Framework结合使用以将消息放入队列中并从队列中读取消息。 在本文中#xff0c;我将更进一步#xff0c;并使用Spring创建一个“消息驱动的Bean”#xff0c;以便对放入队列中… 在我之前的文章中我展示了一个简单的示例该示例如何将AWS SQS与Spring Framework结合使用以将消息放入队列中并从队列中读取消息。 在本文中我将更进一步并使用Spring创建一个“消息驱动的Bean”以便对放入队列中的每个消息都进行“自动”处理。 AWS在其文档页面上将其称为异步方式。 要做到这一点我将在Spring中定义一个MessageListener并将其配置为描述来听我的队列在这里 。 要查看初始项目设置请参阅我的前一篇文章因为在此不再赘述。 Spring应用程序上下文将定义消息侦听器和相应的对象如下所示 bean idamazonMessageListener classnet.pascalalma.aws.sqs.SpringMessageDrivenBean /bean idmessageListener classorg.springframework.jms.listener.adapter.MessageListenerAdapterproperty namedelegate refamazonMessageListener/property namedefaultListenerMethod valueonMessage/property namemessageConverternull//property/beanbean idjmsContainer classorg.springframework.jms.listener.DefaultMessageListenerContainerproperty nameconnectionFactory refconnectionFactory/property namedestinationName refqueueName /property namemessageListener refmessageListener //bean 首先我定义了我的MDBMessageDrivenBeanbean并将其称为“ amazonMessageListener”。 接下来我将此MDB用作“ messageListener”适配器的“代理”。 这个“适配器” bean还可以负责转换消息有效负载此处忽略并在委托的侦听器中调用正确的方法。 在jmsContainerbean中adapter与使用的JMS连接Factory和目标链接在一起。 剩下的就是MDB本身的源代码 package net.pascalalma.aws.sqs;import org.apache.log4j.Logger;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.TextMessage;public class SpringMessageDrivenBean {final static Logger logger Logger.getLogger(SpringMessageDrivenBean.class);public void onMessage(Message message) {if (message instanceof TextMessage) {try {logger.info(String.format(MDB received: %s , ((TextMessage) message).getText()));}catch (JMSException ex) {throw new RuntimeException(ex);}}else {throw new IllegalArgumentException(Message must be of type TextMessage);}}
} 我认为这非常简单。 对于放在队列中的每条消息都会调用方法“ onMessage”在这种情况下它仅打印消息的文本内容。 为了查看它的工作原理我使用下面的“ main”类 package net.pascalalma.aws.sqs;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringMdbMain {public static void main(String[] args) {//Build application context by reading spring-config.xmlApplicationContext ctx new ClassPathXmlApplicationContext(new String[]{application-context.xml});//Get an instance of ProviderService class;MyMessageProvider prdSvc (MyMessageProvider) ctx.getBean(myMessageProviderService);//Call getProduct method of ProductServiceprdSvc.sendMessage(This is a test A);prdSvc.sendMessage(This is a test B);prdSvc.sendMessage(This is a test C);prdSvc.sendMessage(This is a test D);}
} 结果为以下输出 2015-04-11 13:17:20 DEBUG net.pascalalma.aws.sqs.MyMessageProvider(23) - Sending message with txt: This is a test A
2015-04-11 13:17:26 DEBUG net.pascalalma.aws.sqs.MyMessageProvider(36) - Message sent
2015-04-11 13:17:26 DEBUG net.pascalalma.aws.sqs.MyMessageProvider(23) - Sending message with txt: This is a test B
2015-04-11 13:17:26 INFO net.pascalalma.aws.sqs.SpringMessageDrivenBean(16) - MDB received: This is a test A
2015-04-11 13:17:26 DEBUG net.pascalalma.aws.sqs.MyMessageProvider(36) - Message sent
2015-04-11 13:17:26 DEBUG net.pascalalma.aws.sqs.MyMessageProvider(23) - Sending message with txt: This is a test C
2015-04-11 13:17:26 INFO net.pascalalma.aws.sqs.SpringMessageDrivenBean(16) - MDB received: This is a test B
2015-04-11 13:17:27 DEBUG net.pascalalma.aws.sqs.MyMessageProvider(36) - Message sent
2015-04-11 13:17:27 DEBUG net.pascalalma.aws.sqs.MyMessageProvider(23) - Sending message with txt: This is a test D
2015-04-11 13:17:27 INFO net.pascalalma.aws.sqs.SpringMessageDrivenBean(16) - MDB received: This is a test C
2015-04-11 13:17:27 DEBUG net.pascalalma.aws.sqs.MyMessageProvider(36) - Message sent
2015-04-11 13:17:27 INFO net.pascalalma.aws.sqs.SpringMessageDrivenBean(16) - MDB received: This is a test D翻译自: https://www.javacodegeeks.com/2015/05/creating-a-message-driven-bean-with-aws-sqs-in-spring.html