javascript
aws sqs_在Spring中将AWS SQS用作JMS提供程序
aws sqs
最近AWS公布了新的客戶端庫,它實現了JMS 1.1規范 ,并使用他們的簡單隊列服務 (SQS)作為JMS提供者 (見杰夫·巴爾的帖子在這里 )。 在我的文章中,我將向您展示如何設置Maven項目以使用Spring Framework來使用該庫。
我們將執行以下步驟:
- 在AWS管理控制臺中創建隊列
- 在機器上設置您的AWS憑證
- 設置您的Maven項目
- 創建Spring配置
- 創建Java文件以產生和接收消息
這篇文章將僅顯示SQS可能性的一些基本用法,但應該足以幫助您入門。 我假設您已經創建了AWS賬戶 ,并且熟悉Maven和基本的Spring設置。
在AWS管理控制臺中創建隊列
第一步是創建隊列,以便我們可以在程序中使用它。 我向您展示了如何使用管理控制臺創建隊列,但是您也可以通過編程方式創建必要的隊列。
當您轉到管理控制臺時,可以選擇SQS頁面,然后單擊“創建新隊列”按鈕:
輸入隊列名稱,并單擊“創建隊列”按鈕以接受當前的默認設置:
在機器上設置您的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
aws sqs
總結
以上是生活随笔為你收集整理的aws sqs_在Spring中将AWS SQS用作JMS提供程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 戴尔电脑3576固态硬盘(戴尔3467更
- 下一篇: 一键设置局域网共享(局域网怎么设置共享)