通过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,一经查实,立即删除!

相关文章

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的快速入门…

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;是…

是时候抛弃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的更新…

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;那些主机提供什么服务&…

问题:三元向量的比较

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

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

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

在Windows XP使用LC5(L0phtCrack)

LC5简介&#xff1a; LC5是国外一种很有名的密码破解软件&#xff0c;能破解用LM加密的SAM。可用它猜解2000\Xp\2003密码。它是著名的美国计算机安全公司Stake出品的Window/Unix密码查找软件LC4/LC5。 使用方法&#xff1a; 1&#xff0c;在主机里新建用户名&#xff0c;密码…

C++ 在屏幕上用星号打印菱形

粉丝提问&#xff1a;C 在屏幕上用星号打印菱形 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> void pr_start(int _num) {int n0;int i 0;for (n 1; n < 2*_num; n) {int temp n;if (n > _num){temp - 2 * (n - …

Android JNI入门第五篇——基本数据类型使用

前面讲到了java和native数据类型&#xff0c;这里就开始做一下使用&#xff1a; 第一步&#xff1a;新建工程 第二部&#xff1a;书写 java方法&#xff1a; [java] view plaincopyprint? public class NativeMethod { static { System.loadLibrary("com…

使用微信开发者工具添加小程序底部导航栏报错

粉丝求助&#xff1a; 示例图&#xff1a; 看了这个页面&#xff0c;很明显这个页面引用的路径都有问题。 解决办法&#xff1a;

应用“Cain Abel”实现DNS欺骗

环境的搭建&#xff1a; 1&#xff0c;在Windows 7安装IIS服务&#xff0c;访问www.baidu.com或其他任意站点&#xff0c;保存首页文件至本地wwwroot文件夹中&#xff1b; &#xff08;1&#xff09;打开控制面板&#xff0c;找到“程序”&#xff0c;点进去 点击“打开或关闭…

Android killer软件闪退的解决办法?

解决办法&#xff1a; 重新下载安装一个版本比较新的。

EditThisCookie使用

下载安装 http://www.cnplugins.com/uploads/plugins/201502/www.cnplugins.com_fngmhnnpilhplaeedifhccceomclgfbg_1_4_1_.crx从上面这个网址下载下来&#xff0c;下下来之后用Chrome插件伴侣制作成谷歌浏览器能直接添加的插件 使用 鼠标右键单击——>EditThisCookie&am…

eclipse中在类saolei.Test 中找不到main方法

粉丝提问&#xff1a;eclipse中在类saolei.Test 中找不到main方法 解决办法&#xff1a; eclipse设置自动保存或者CTRLS 建议使用更加智能的编译器IDEA

Cookie和会话Session

Cookie和会话Session Cookie Cookie是识别客户端的特定用户。 1.每次HTTP请求的时候&#xff0c;客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的&#xff0c;第一次创建Session的时候&#xff0c;服务端会在HTTP协议中告诉客…

高速排序算法

高速排序算法作者 July 二零一一年一月四日------------------------------------------写之前&#xff0c;先说点题外话。每写一篇文章&#xff0c;我都会遵循下面几点原则&#xff1a;一、保持版面的尽量清晰&#xff0c;力保排版良好。二、力争所写的东西&#xff0c;清晰易…