1. 首先,需要簡單瞭解下關於SQS的官方介紹。
2. 官方提供了兩個版本的,下載源碼後可以很方便地找到example,至少大部分是可以的。
3. 以下是總結使用javav2版本的SQS使用,AWS官網例子也有介紹。
1) 首先導入依賴:
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>aws-query-protocol</artifactId>
<version>2.3.7</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>protocol-core</artifactId>
<version>2.3.7</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>profiles</artifactId>
<version>2.3.7</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sdk-core</artifactId>
<version>2.3.7</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>utils</artifactId>
<version>2.3.7</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>auth</artifactId>
<version>2.3.7</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>regions</artifactId>
<version>2.3.7</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>http-client-spi</artifactId>
<version>2.3.7</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>apache-client</artifactId>
<version>2.3.7</version>
</dependency>
2) 假設創建一個工具類,SqsUtil:
package com.bas.util;
import org.apache.commons.lang3.StringUtils;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.List;
public class SqsUtil {
public static SqsClient builder(String regionStr) {
Region region = Region.US_EAST_1;//default region
if(StringUtils.isNotEmpty(regionStr)) {
region = Region.of(regionStr);
}
return SqsClient.builder().region(region).build();
}
public static void main(String[] args) {
}
}
3) 因爲queue的url可以直接取得,所以可以直接使添加接口發送消息:
public static void sendMessageWithUrl(SqsClient sqsClient, String queueUrl, String message) {
SendMessageRequest send_msg_request = SendMessageRequest.builder()
.queueUrl(queueUrl)
.messageBody(message)
.delaySeconds(5)
.build();
sqsClient.sendMessage(send_msg_request);
}
4) 添加刪除消息功能:
public static void deleteMessageWithUrl(SqsClient sqsClient, String queueUrl, Message message) {
DeleteMessageRequest deleteRequest = DeleteMessageRequest.builder()
.queueUrl(queueUrl)
.receiptHandle(message.receiptHandle())
.build();
sqsClient.deleteMessage(deleteRequest);
}
5) 添加接收消息功能:
public static List<Message> receiveMessageWithUrl(SqsClient sqsClient, String queueUrl, int maxNumberOfMessages) {
ReceiveMessageRequest receiveRequest = ReceiveMessageRequest.builder()
.queueUrl(queueUrl)
.maxNumberOfMessages(maxNumberOfMessages)
.build();
return sqsClient.receiveMessage(receiveRequest).messages();
}
注:
1. 在使用過程中,Sqs可能會有延遲,比如說send了一條message,如果立刻獲取消息可能會獲取不了,同理,刪除消息後立刻獲取消息也會如此。
附:
1. 在EC2上也可以使用cli來進行操作,命令可以參考:https://docs.aws.amazon.com/cli/latest/reference/sqs/index.html