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