日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

使用Java使用Amazon Simple Queue Service

發(fā)布時(shí)間:2023/12/3 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Java使用Amazon Simple Queue Service 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Amazon Simple Queue Service或SQS是Amazon Webservice堆棧提供的高度可擴(kuò)展的托管消息隊(duì)列。 Amazon SQS可用于完全解耦系統(tǒng)中不同組件的操作,這些組件否則將交換數(shù)據(jù)以執(zhí)行獨(dú)立的任務(wù)。 Amazon SQS還可以幫助我們保存在應(yīng)用程序關(guān)閉或組件之一不可用時(shí)丟失的數(shù)據(jù)。

Amazon SQS功能(直接從亞馬遜網(wǎng)站復(fù)制)

  • 冗余基礎(chǔ)結(jié)構(gòu) -保證至少一次傳遞消息,對(duì)消息的高度并發(fā)訪問以及發(fā)送和檢索消息的高可用性
  • 多位作者和讀者-系統(tǒng)的多個(gè)部分可以同時(shí)發(fā)送或接收消息。 SQS在處理期間鎖定消息,以防止系統(tǒng)的其他部分同時(shí)處理消息。
  • 每個(gè)隊(duì)列的可配置設(shè)置 -您的所有隊(duì)列不必完全相同。 例如,一個(gè)隊(duì)列可以針對(duì)需要比其他隊(duì)列更長的處理時(shí)間的消息進(jìn)行優(yōu)化。
  • 可變的消息大小 -您的消息最大為65536字節(jié)(64 KiB)。 對(duì)于更大的消息,您可以使用Amazon Simple Storage Service(Amazon S3)或Amazon SimpleDB存儲(chǔ)消息的內(nèi)容,并使用Amazon SQS持有指向Amazon S3或Amazon SDB對(duì)象的指針。 或者,您可以將較大的消息拆分為較小的消息。
  • 訪問控制 -您可以控制誰可以向隊(duì)列發(fā)送消息,以及誰可以從隊(duì)列接收消息
  • 延遲隊(duì)列 -延遲隊(duì)列是用戶在隊(duì)列上設(shè)置默認(rèn)延遲的延遲隊(duì)列,以便所有排隊(duì)的消息的發(fā)送將被延遲該時(shí)間段。 您可以使用CreateQueue創(chuàng)建隊(duì)列時(shí)設(shè)置延遲值,也可以使用SetQueueAttributes更新該值。 如果更新該值,則新值僅影響更新后排隊(duì)的消息。
  • 有了以上知識(shí),讓我們嘗試使用SQS創(chuàng)建簡單的照片處理服務(wù)。

    本教程的問題定義

    我們將創(chuàng)建一個(gè)包含以下組件的簡單照片處理應(yīng)用程序。

  • Photo Uploader serivce –這是一項(xiàng)網(wǎng)絡(luò)服務(wù),允許用戶將照片上傳到系統(tǒng)。 照片上傳后,它們將存儲(chǔ)在臨時(shí)存儲(chǔ)中。 為了簡單起見,我們假設(shè)用戶已經(jīng)上傳了照片并將其存儲(chǔ)在預(yù)定義的位置。
  • AWSSimpleQueueServiceUtil –這是一個(gè)實(shí)用程序類,用于包裝Amazon SQS客戶端并在SQS隊(duì)列上執(zhí)行基本的CRUD操作。
  • PhotoProcessingManager –管理整個(gè)節(jié)目。 它將調(diào)用AWSSimpleQueueServiceUtil將消息發(fā)送/接收到SQS,并調(diào)用PhotoProcessor處理照片,最后從隊(duì)列中刪除消息。 通常,我們應(yīng)該打算讓此類充當(dāng)SQS的偵聽器,但為簡單起見,我們僅使用輪詢機(jī)制從SQS中提取消息。
  • PhotoProcessor –通過PhotoProcessingManager從SQS獲取照片消息并生成縮略圖。
  • 在開始之前,如果您通過以下鏈接觀看視頻,那就太好了: http : //docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSGettingStartedGuide/Welcome.html

    入門步驟

  • 創(chuàng)建一個(gè)亞馬遜帳戶。 您將需要一張信用卡
  • 登錄到控制臺(tái)console.aws.amazon.com 。
  • 在控制臺(tái)儀表板上搜索SQS,然后單擊它。 它會(huì)將您帶到您的SQS家。
  • 創(chuàng)建一個(gè)新的SQS隊(duì)列,并將其命名為PhotoQueue。 將其余設(shè)置保留為默認(rèn)設(shè)置。 我們還可以動(dòng)態(tài)創(chuàng)建和刪除SQS隊(duì)列,但是在本教程中,我有一個(gè)預(yù)先創(chuàng)建的隊(duì)列,該隊(duì)列將在我的代碼中使用。
  • 現(xiàn)在我們有了一個(gè)隊(duì)列,現(xiàn)在我們將在我們最喜歡的Java編輯器中創(chuàng)建一個(gè)簡單的Java項(xiàng)目,并了解如何利用此隊(duì)列。
  • 完成后,您需要下載安全憑證。 為此,請(qǐng)轉(zhuǎn)到“我的帳戶” /“安全憑證”。 我們追求的是訪問憑據(jù)。 您將看到有3種類型的訪問憑據(jù),其中之一是“訪問密鑰”。 我們需要它來訪問和使用剛剛創(chuàng)建的PhotoQueue。 我們將創(chuàng)建一組新的訪問密鑰,并將訪問密鑰和秘密密鑰存儲(chǔ)在安全的位置。
  • 現(xiàn)在,從此處下載適用于Java的SDK。 http://aws.amazon.com/sdkforjava 。 在sdk的lib文件夾中,將aws-java-sdk-1.3.33.jar復(fù)制到您的項(xiàng)目類路徑。

    Maven用戶可以在其POM中添加以下依賴項(xiàng)

    <dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk</artifactId><version>1.3.33</version> </dependency>

    創(chuàng)建一個(gè)名為“ AwsCredentials.properties”的文件,將其存儲(chǔ)在您的項(xiàng)目中。 該文件將包含以下屬性

    accessKey = secretKey =

    這些屬性的值是您在步驟6中生成的訪問密鑰。

  • 對(duì)于照片處理,我正在使用imgscalr 。 它是Java中的一個(gè)輕量級(jí)且很棒的照片處理庫,用于執(zhí)行簡單的任務(wù),例如調(diào)整大小,旋轉(zhuǎn),裁剪等。您可以從http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library下載該jar /#download 。 Maven用戶可以將以下內(nèi)容添加到其依賴項(xiàng)列表中。 <dependency><groupId>org.imgscalr</groupId><artifactId>imgscalr-lib</artifactId><version>4.2</version><type>jar</type><scope>compile</scope></dependency>
  • 現(xiàn)在,我們準(zhǔn)備搖擺不定,并通過一些代碼使我們的手變得骯臟。

    AWSSimpleQueueServiceUtil.java

    package com.aranin.adconnect.util.aws;import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClient; import com.amazonaws.services.sqs.model.*;import java.io.FileInputStream; import java.util.List; import java.util.Properties;/*** Created by IntelliJ IDEA.* User: Niraj Singh* Date: 3/19/13* Time: 10:44 AM* To change this template use File | Settings | File Templates.*/ public class AWSSimpleQueueServiceUtil {private BasicAWSCredentials credentials;private AmazonSQS sqs;private String simpleQueue = "PhotoQueue";private static volatile AWSSimpleQueueServiceUtil awssqsUtil = new AWSSimpleQueueServiceUtil();/*** instantiates a AmazonSQSClient http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/sqs/AmazonSQSClient.html* Currently using BasicAWSCredentials to pass on the credentials.* For SQS you need to set your regions endpoint for sqs.*/private AWSSimpleQueueServiceUtil(){try{Properties properties = new Properties();properties.load(new FileInputStream("D:/samayik/adkonnection/src/main/resources/AwsCredentials.properties"));this.credentials = new BasicAWSCredentials(properties.getProperty("accessKey"),properties.getProperty("secretKey"));this.simpleQueue = "PhotoQueue";this.sqs = new AmazonSQSClient(this.credentials);/*** My queue is in singapore region which has following endpoint for sqs* https://sqs.ap-southeast-1.amazonaws.com* you can find your endpoints here* http://docs.aws.amazon.com/general/latest/gr/rande.html** Overrides the default endpoint for this client ("sqs.us-east-1.amazonaws.com")*/this.sqs.setEndpoint("https://sqs.ap-southeast-1.amazonaws.com");/**You can use this in your web app where AwsCredentials.properties is stored in web-inf/classes*///AmazonSQS sqs = new AmazonSQSClient(new ClasspathPropertiesFileCredentialsProvider());}catch(Exception e){System.out.println("exception while creating awss3client : " + e);}}public static AWSSimpleQueueServiceUtil getInstance(){return awssqsUtil;}public AmazonSQS getAWSSQSClient(){return awssqsUtil.sqs;}public String getQueueName(){return awssqsUtil.simpleQueue;}/*** Creates a queue in your region and returns the url of the queue* @param queueName* @return*/public String createQueue(String queueName){CreateQueueRequest createQueueRequest = new CreateQueueRequest(queueName);String queueUrl = this.sqs.createQueue(createQueueRequest).getQueueUrl();return queueUrl;}/*** returns the queueurl for for sqs queue if you pass in a name* @param queueName* @return*/public String getQueueUrl(String queueName){GetQueueUrlRequest getQueueUrlRequest = new GetQueueUrlRequest(queueName);return this.sqs.getQueueUrl(getQueueUrlRequest).getQueueUrl();}/*** lists all your queue.* @return*/public ListQueuesResult listQueues(){return this.sqs.listQueues();}/*** send a single message to your sqs queue* @param queueUrl* @param message*/public void sendMessageToQueue(String queueUrl, String message){SendMessageResult messageResult = this.sqs.sendMessage(new SendMessageRequest(queueUrl, message));System.out.println(messageResult.toString());}/*** gets messages from your queue* @param queueUrl* @return*/public List<Message> getMessagesFromQueue(String queueUrl){ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl);List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();return messages;}/*** deletes a single message from your queue.* @param queueUrl* @param message*/public void deleteMessageFromQueue(String queueUrl, Message message){String messageRecieptHandle = message.getReceiptHandle();System.out.println("message deleted : " + message.getBody() + "." + message.getReceiptHandle());sqs.deleteMessage(new DeleteMessageRequest(queueUrl, messageRecieptHandle));}public static void main(String[] args){}}

    PhotoProcessor.java

    package com.aranin.adconnect.util.aws;import org.imgscalr.Scalr;import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File;/*** Created by IntelliJ IDEA.* User: Niraj Singh* Date: 3/19/13* Time: 12:32 PM* To change this template use File | Settings | File Templates.*/ public class PhotoProcessor {public static void generateImage(String imagePath, String origName, String targetName, int scalabity){String origImage = null;String targetImage = null;File origFile = null;BufferedImage buffImg = null;File targetFile = null;try{origImage = imagePath + "/" + origName;targetImage = imagePath + "/" + targetName;origFile = new File(origImage);buffImg = ImageIO.read(origFile);buffImg = Scalr.resize(buffImg, Scalr.Method.SPEED, scalabity);targetFile = new File(targetImage);ImageIO.write(buffImg, "jpeg", targetFile);}catch (Exception e){System.out.println("Exception in processing image : " + e);}finally {buffImg = null;}} }

    PhotoFile.java

    package com.aranin.adconnect.util.aws;/*** Created by IntelliJ IDEA.* User: Niraj Singh* Date: 3/19/13* Time: 12:29 PM* To change this template use File | Settings | File Templates.*/ public class PhotoFile {private String origName;private String targetName;public String imagePath;public String getOrigName() {return origName;}public void setOrigName(String origName) {this.origName = origName;}public String getTargetName() {return targetName;}public void setTargetName(String targetName) {this.targetName = targetName;}public String getImagePath() {return imagePath;}public void setImagePath(String imagePath) {this.imagePath = imagePath;}public String toString(){return origName + "," + targetName + "," + imagePath;} }

    SQSPhotoManager.java

    package com.aranin.adconnect.util.aws;import com.amazonaws.services.sqs.model.Message;import java.util.List; import java.util.StringTokenizer;/*** Created by IntelliJ IDEA.* User: Niraj Singh* Date: 3/20/13* Time: 11:38 AM* To change this template use File | Settings | File Templates.*/ public class SQSPhotoManager implements Runnable{private String queueUrl;public static void main(String[] args){AWSSimpleQueueServiceUtil awssqsUtil = AWSSimpleQueueServiceUtil.getInstance();/*** 1. get the url for your photo queue*/String queueUrl = awssqsUtil.getQueueUrl(awssqsUtil.getQueueName());System.out.println("queueUrl : " + queueUrl);/*** 2. Add a photo to the queue to be processed*/PhotoFile photo = new PhotoFile();photo.setImagePath("C:/Users/Public/Pictures/Sample Pictures");photo.setOrigName("Tree.jpg");photo.setTargetName("Tree_thumb.jpg");/*** 3. set the photofile in queue for processing*/awssqsUtil.sendMessageToQueue(queueUrl, photo.toString());/*** get the messages from queue*/Thread managerthread = new Thread(new SQSPhotoManager(queueUrl),"T2");managerthread.start();}public SQSPhotoManager(String queueUrl){this.queueUrl = queueUrl;}@Overridepublic void run() {AWSSimpleQueueServiceUtil awssqsUtil = AWSSimpleQueueServiceUtil.getInstance();boolean flag = true;while(flag){List<Message> messages = awssqsUtil.getMessagesFromQueue(this.queueUrl);if(messages == null || messages.size() == 0){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.}}else{flag = false;for (Message message : messages) {String messagePhoto = message.getBody();System.out.println("photo to be processed : " + messagePhoto);StringTokenizer photoTokenizer = new StringTokenizer(messagePhoto,",");String source = null;String target = null;String path = null;source = photoTokenizer.nextToken();target = photoTokenizer.nextToken();path = photoTokenizer.nextToken();System.out.println("source : " + source);System.out.println("target : " + target);System.out.println("path : " + path);/*** generate thumbmail within 150*150 container*/PhotoProcessor.generateImage(path, source, target, 150);}/*** finally delete the message*/for (Message message : messages) {awssqsUtil.deleteMessageFromQueue(this.queueUrl, message);}}}} }

    這將構(gòu)成使用SQS的PhotoProcessor應(yīng)用程序的核心。 此代碼有一個(gè)明顯的缺點(diǎn)。 它使用線程對(duì)SQS進(jìn)行輪詢,如果您可以在代碼中創(chuàng)建一個(gè)偵聽器來訂閱隊(duì)列并在收到新消息時(shí)采取必要的措施,那將是很好的選擇。 這確實(shí)是我下一篇文章的主題。 然后,隨時(shí)向我提問,我們可以共同找到答案。

    參考: Weblog4j博客上的JCG合作伙伴 Niraj Singh 使用Java使用Amazon Simple Queue Service 。

    翻譯自: https://www.javacodegeeks.com/2013/06/working-with-amazon-simple-queue-service-using-java.html

    總結(jié)

    以上是生活随笔為你收集整理的使用Java使用Amazon Simple Queue Service的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。