通过Spring将AWS SQS用作JMS提供程序

最近AWS公布了新的客户端库,它实现了JMS 1.1规范 ,并使用他们的简单队列服务 (SQS)作为JMS提供者 (见杰夫·巴尔的帖子在这里 )。 在我的文章中,我将向您展示如何设置Maven项目以使用Spring Framework来使用该库。
我们将执行以下步骤:

  • 在AWS管理控制台中创建队列
  • 在机器上设置您的AWS凭证
  • 设置您的Maven项目
  • 创建Spring配置
  • 创建Java文件以产生和接收消息

这篇文章将仅显示SQS可能性的一些基本用法,但应该足以帮助您入门。 我假设您已经创建了AWS账户 ,并且熟悉Maven和基本的Spring设置。

在AWS管理控制台中创建队列

第一步是创建队列,以便我们可以在程序中使用它。 我向您展示了如何使用管理控制台创建队列,但是您也可以通过编程方式创建必要的队列。

转到管理控制台时,可以选择SQS页面,然后单击“创建新队列”按钮:

screenshot-at-mar-28-20-10-00

输入队列名称,并单击“创建队列”按钮,以接受当前的默认设置:

screenshot-at-mar-28-20-10-59

在机器上设置您的AWS凭证

为了能够使用Java SDK访问您的AWS资料,最简单的方法是在用户的主目录中创建一个“ credentials.proeprties”文件。 在〜/ .aws / credentials(对于Windows用户为C:\ Users \ USER_NAME \ .aws \ credentials)处创建凭据文件,并在将大写的值替换为您自己的值之后,保存以下行。

[default]
aws_access_key_id = YOUR_ACCESS_KEY_ID
aws_secret_access_key = YOUR_SECRET_ACCESS_KEY

设置您的Maven项目

使用Maven设置项目时,可以将以下依赖项添加到pom中,以便能够在Spring 4中使用AWS SQS:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>net.pascalalma.aws</groupId><artifactId>sqs-client</artifactId><version>1.0-SNAPSHOT</version><properties><version.spring>4.1.5.RELEASE</version.spring></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${version.spring}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${version.spring}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${version.spring}</version></dependency><dependency><groupId>com.amazonaws</groupId><artifactId>amazon-sqs-java-messaging-lib</artifactId><version>1.0.0</version><type>jar</type></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies>
</project>

创建Spring配置

在第一个示例中,我将使用一个简单的MessageProducer和MessageConsumer类,其中生产者将消息放入队列,而使用者将从队列中读取一条消息。 这是模型是下文称要通过AWS作为一个“同步”的呼叫。 Spring配置如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><context:component-scan base-package="net.pascalalma.aws.sqs"></context:component-scan><bean id="credentialsProviderBean" class="com.amazonaws.auth.DefaultAWSCredentialsProviderChain"/><bean id="connectionFactoryBuilder" class="com.amazon.sqs.javamessaging.SQSConnectionFactory$Builder"><property name="regionName" value="eu-west-1"/><property name="numberOfMessagesToPrefetch" value="5"/><property name="awsCredentialsProvider" ref="credentialsProviderBean"/></bean><bean id="connectionFactory" class="com.amazon.sqs.javamessaging.SQSConnectionFactory"factory-bean="connectionFactoryBuilder"factory-method="build"/><bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"><property name="connectionFactory" ref="connectionFactory"/><property name="defaultDestinationName" ref="queueName"/></bean><bean id="queueName" class="java.lang.String"><constructor-arg value="DefaultDemoQueue"/></bean>
</beans>

创建Java文件以产生和接收消息

最后一步是创建必要的Java文件。 我认为它们足够简单且易于解释,因此我仅在此处显示源代码。 首先,我们有MessageProducer,它在执行消息时将消息放入队列中:

package net.pascalalma.aws.sqs;import org.apache.log4j.Logger;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;@Service("myMessageProviderService")
public class MyMessageProvider {final static Logger logger = Logger.getLogger(MyMessageProvider.class);@Resource(name = "jmsTemplate")private JmsTemplate jmsTemplate;public void sendMessage(final String txt) {logger.debug(String.format("Sending message with txt: %s", txt));jmsTemplate.send(new MessageCreator() {public Message createMessage(Session session) throws JMSException {final TextMessage msg = session.createTextMessage(txt);return msg;}});logger.debug("Message sent ");}
}

接下来是MessageConsumer,在此示例中,MessageConsumer在执行时仅从队列中读取一条消息:

package net.pascalalma.aws.sqs;import org.apache.log4j.Logger;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.TextMessage;@Service("myMessageConsumerService")
public class MyMessageConsumer {final static Logger logger = Logger.getLogger(MyMessageConsumer.class);@Resource(name = "jmsTemplate")private JmsTemplate jmsTemplate;public void readMessage() throws JMSException {logger.debug("Reading message");Message msg = jmsTemplate.receive();if (msg instanceof TextMessage) {TextMessage txtmsg = (TextMessage) msg;logger.info(String.format("Received text: %s", txtmsg.getText()));}logger.debug(msg.getClass());logger.info("Done");}
}

最后是Main类,它读取Spring配置并运行Producer和Consumer:

package net.pascalalma.aws.sqs;import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import javax.jms.JMSException;public class SpringMain {final static Logger logger = Logger.getLogger(SpringMain.class);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 ProductService class;MyMessageProvider prdSvc = (MyMessageProvider) ctx.getBean("myMessageProviderService");MyMessageConsumer conSvc = (MyMessageConsumer) ctx.getBean("myMessageConsumerService");//Call getProduct method of ProductServiceprdSvc.sendMessage("This is a test");try {conSvc.readMessage();} catch (JMSException e) {logger.error(e);}}
}

当运行Main类时,一切正常时,您将看到以下输出:

2015-03-29 10:26:39 DEBUG net.pascalalma.aws.sqs.MyMessageProvider(28) - Sending message with txt: This is a test
2015-03-29 10:26:41 DEBUG net.pascalalma.aws.sqs.MyMessageProvider(35) - Message sent 
2015-03-29 10:26:41 DEBUG net.pascalalma.aws.sqs.MyMessageConsumer(24) - Reading message
2015-03-29 10:26:41 INFO  net.pascalalma.aws.sqs.MyMessageConsumer(29) - Received text: This is a test
2015-03-29 10:26:41 DEBUG net.pascalalma.aws.sqs.MyMessageConsumer(32) - class com.amazon.sqs.javamessaging.message.SQSTextMessage
2015-03-29 10:26:41 INFO  net.pascalalma.aws.sqs.MyMessageConsumer(33) - DoneProcess finished with exit code 0

翻译自: https://www.javacodegeeks.com/2015/04/using-aws-sqs-as-jms-provider-with-spring.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【APICloud系列|15】上架ios应用到苹果应用市场总结

今年4月初从公司离职啦,这几天学习了很多大前端知识体系,今天收到老板委托把这个遗留的问题处理一下。安卓几个应用商店已经更新了所有的程序,比较简单,一般人都可以很容易上架,对上架到苹果应用市场第一次搞或者老手也会遇到很多坑,这里面主要会涉及到邓白氏编码,苹果开…

常见网络协议端口号

一、端口的分类 1&#xff09;按端口性质来分 公认端口&#xff08;常用端口&#xff09;&#xff1a;0-1024 通常这些端口的通信明确表明了某种服务的协议。这些端口是不可以重新定义它的作用对象。 如80端口实际上总是HTTP通信所使用的&#xff0c;而23号端口是Teln…

java foxmail 附件_foxmail 本程序使用JavaMail进行收取和发送带附件的邮件 - 下载 - 搜珍网...

邮件客户端/foxmail/.classpath邮件客户端/foxmail/.project邮件客户端/foxmail/bin/org/crazyit/foxmail/box/AbstractBox.class邮件客户端/foxmail/bin/org/crazyit/foxmail/box/DeletedBox.class邮件客户端/foxmail/bin/org/crazyit/foxmail/box/DraftBox.class邮件客户端/f…

netbeans7.4_带有NetBeans 7.1 RC 2的快速入门WebLogic 12c

netbeans7.4WebLogic服务器12c停运了几天。 它适用于“裸”的Java开发人员-精美的Fusion Middleware东西将继续沿线升至12c。 因此&#xff0c;这基本上是我要运行的版本。 今天&#xff0c;我为您提供一个最新的NetBeans 7.1&#xff08;RC 2&#xff09;和WebLogic的快速入门…

ORACLE SEQUENCE 介绍

在oracle中sequence就是所谓的序列号&#xff0c;每次取的时候它会自己主动添加&#xff0c;一般用在须要按序列号排序的地方。 1、Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限&#xff0c; CREATE SEQUENCE emp_sequence INCREMENT BY 1 …

burpsuite全套使用教程

burpsuite 实验环境安装教程浏览器配置篇使用方法Target模块(目标模块)Proxy模块(代理模块)Spider模块(蜘蛛爬行)Scanner模块(漏洞扫描)Intruder模块decoder模块(编码模块)Comparer模块(比较器)RepeaterSequencer 实验环境 burpsuite1.733 win10 dvwa firefox 安装教程 第…

致我们曾经白嫖的网站

十分好用的在线工具网站,珍藏版,分享给你们 1.奶牛快传:用户体验更好的网盘工具。 最近开始使用的一款网盘工具,和百度网盘类似,不过没有下载速度的限制,并且可以支持自定义分享文件的下载次数(需要开会员)。 还有一点让我觉得比较舒服的是,你给别人分享文件,别人无…

java word模版填充_[转载]java向word模板中填充数据(总结)

使用过PageOffice动态生成word文档的人都知道,PageOffice可以给word文档的指定位置进行填充,这里我们所说的指定位置在PageOffice的专业术语里面有两个概念&#xff0c;一个叫做数据区域(DataRegion)&#xff0c;另一个叫做数据标签(DataTag)。一、 概念数据区域&#xff1a;是…

网站访问优化,未完待续

下午&#xff0c;网站被吐槽了&#xff0c;访问太慢。最初&#xff0c;我以为是首页的banner图片&#xff0c;太大导致的&#xff0c;之前是500kb的高清图。立即去看了下&#xff0c;banner大图已经压缩到50kb了。so&#xff0c;不是图片的问题。 用Chrome打开网站&#xff0…

Linux中重要文件

用户文件 /etc/passwd------用户名和UID等信息 /etc/shadow------用户密码 组账号 /etc/group-------组名和GID等信息 /etc/gshadow----组密码 1、用户名和UID等信息存放在/etc/passwd中&#xff08;7列&#xff09; 每一行都表示的是一个用户的信息&#xff1b;一行有…

HTML5教程(学完html的,这个可以快速过一遍)

目录 HTML5 教程HTML5 浏览器支持HTML5 新元素HTML5 语义元素HTML5 代码规范HTML5 MathMLHTML5 Web SQL数据库HTML5 迁移HTML5 CanvasHTML5 内联 SVGHTML5 Canvas VS svgHTML5 多媒体HTML5 Object元素HTML5 Audio音频HTML5 Video视频HTML5 新的input类型HTML5 表单元素

是时候抛弃Java 7 – JBoss EAP 6.4了!

这一周真是太棒了。 JBoss EAP 6.4已发布&#xff0c;并且在大量技术增强和新功能中 &#xff0c;最大的是&#xff1a;Java 8已添加到受支持的配置列表中。 其中包括Oracle JDK和IBM JDK。 Java SE 7公开更新结束通知 2015年4月之后&#xff0c;Oracle将不再将Java SE 7的更新…

java 时间戳 星期几_java自定义获取星期几、几点、几分。

/*** author 9082046**qq.com**/public void out_week_hour_minute(){long eight_hour_ms 8*60*60*1000;//8小时*分*秒*毫秒,时区影响&#xff0c;北京时区:东八区。long per_week_ms 7*24*60*60*1000;//7天*时*分*秒*毫秒,一周。long four_day_ms 4*24*60*60*1000;//4天*时…

bzoj 3668 数位DP

收获&#xff1a; 1、如果有很多位操作&#xff0c;并且不包含-/等高级运算&#xff0c;那么可以一位一位考虑&#xff0c;如果求一个最优解&#xff0c;可以尝试逐位确定&#xff0c;这道题因为原始攻击值有范围&#xff0c;那么就需要数位DP。 1 /**************************…

常用的视频下载网站

视频已经成为生活中不可缺少的一部分&#xff0c;不搬运视频怎么在此基础上创新。 小视频下载 V视频助手 硕鼠视频下载 维棠视频下载 Apowersoft视频下载王 Video Grabber Eagleget视频下载 喜欢的朋友可以收藏一下&#xff0c;万一以后想用找不到就不能二次创新了&#xff01;…

漏洞工具:nmap和nessus

NMAP NMAP&#xff08;Network Mapper&#xff09;是一款开放源代码的网络探测和安全审核的工具。它的设计目标是快速地扫描大型网络&#xff0c;当然用它扫描单个主机也没有问题.Nmap以新颖的方式使用原始IP报文来发现网络上有一些主机&#xff0c;那些主机提供什么服务&…

java调用kettle例子_Kettle API - Java调用示例

Kettle API - Java调用示例对向前兼容性的推荐&#xff1a;如果想要动态地创造Transformation (例如:从元数据)&#xff0c;使用XML文件方法(KTR)而不是使用API。XML文件兼容Kettle所有版本&#xff0c;同样对job有效的。1.下面的例子进行以下操作&#xff1a;1创建Transformat…

问题:三元向量的比较

粉丝投来一个题目:要求用到函数调用,编写程序 题目内容: 如果语文数学两门课程的成绩,甲同学分别是80分和90分,乙同学是90分和80分,丙同学是70和60分,这时比较甲同学和乙同学的成绩,只能说语文较差,数学较好,综合到一起就属于无法比较,但对丙同学可以比较,可以…

css隐藏元素的几种方法与区别

css隐藏元素的几种方法与区别 一&#xff1a;display&#xff1a;none;隐藏不占位 display 除了不能加入 CSS3 动画豪华大餐之外&#xff0c;基本效果卓越&#xff0c;没什么让人诟病的地方。二&#xff1a;position&#xff1a;absolut;left/top:-99999px;足够大的负值使其不可…

mysql版本不同会导致语法错误码_神奇的 SQL,Group By 真扎心,原来是这样!

作者&#xff1a;青石路原文&#xff1a;cnblogs.com/youzhibing/p/11516154.htmlGROUP BY 后 SELECT 列的限制标准 SQL 规定&#xff0c;在对表进行聚合查询的时候&#xff0c;只能在 SELECT 子句中写下面 3 种内容&#xff1a;通过 GROUP BY 子句指定的聚合键、聚合函数(SUM …