关于Aws SQS的使用 小结

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章