Spring boot 与 S3 的AWS SQS交互的代码,以及Spring boot 与S3 的AWS SNS交互
与AWS SQS(Simple Queue Service)和AWS SNS(Simple Notification Service)的集成是常见的消息传递和通知功能需求。我们将分两个部分进行示例:一个用于SQS,另一个用于SNS。
1. Spring Boot 与 AWS SQS 的交互
步骤一:添加依赖
在Spring Boot项目中添加AWS SQS相关的依赖。
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sqs</artifactId>
<version>2.17.27</version> <!-- 根据需要选择最新版本 -->
</dependency>
步骤二:配置AWS凭证
在application.properties中配置AWS凭证和SQS队列URL。
aws.sqs.queueUrl=https://sqs.<region>.amazonaws.com/<account-id>/<queue-name>
aws.region=your-region
步骤三:创建SQS服务类
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
@Service
public class SqsService {
private final SqsClient sqsClient;
private final String queueUrl;
public SqsService(@Value("${aws.sqs.queueUrl}") String queueUrl,
@Value("${aws.region}") String region) {
this.sqsClient = SqsClient.builder()
.region(Region.of(region))
.credentialsProvider(DefaultCredentialsProvider.create())
.build();
this.queueUrl = queueUrl;
}
public void sendMessage(String message) {
SendMessageRequest sendMsgRequest = SendMessageRequest.builder()
.queueUrl(queueUrl)
.messageBody(message)
.build();
sqsClient.sendMessage(sendMsgRequest);
}
public void receiveMessages() {
ReceiveMessageRequest receiveRequest = ReceiveMessageRequest.builder()
.queueUrl(queueUrl)
.maxNumberOfMessages(5)
.build();
sqsClient.receiveMessage(receiveRequest).messages().forEach(message -> {
System.out.println("Message received: " + message.body());
// 删除消息
deleteMessage(message.receiptHandle());
});
}
private void deleteMessage(String receiptHandle) {
DeleteMessageRequest deleteRequest = DeleteMessageRequest.builder()
.queueUrl(queueUrl)
.receiptHandle(receiptHandle)
.build();
sqsClient.deleteMessage(deleteRequest);
}
}
步骤四:在控制器中使用SQS服务
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/sqs")
public class SqsController {
private final SqsService sqsService;
public SqsController(SqsService sqsService) {
this.sqsService = sqsService;
}
@PostMapping("/send")
public String sendMessage(@RequestParam String message) {
sqsService.sendMessage(message);
return "Message sent!";
}
@GetMapping("/receive")
public String receiveMessages() {
sqsService.receiveMessages();
return "Messages received!";
}
}
2. Spring Boot 与 AWS SNS 的交互
步骤一:添加依赖
在Spring Boot项目中添加AWS SNS相关的依赖。
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sns</artifactId>
<version>2.17.27</version> <!-- 根据需要选择最新版本 -->
</dependency>
步骤二:配置AWS凭证
在application.properties中配置AWS凭证和SNS主题ARN。
aws.sns.topicArn=arn:aws:sns:<region>:<account-id>:<topic-name>
aws.region=your-region
步骤三:创建SNS服务类
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.PublishRequest;
import software.amazon.awssdk.services.sns.model.PublishResponse;
@Service
public class SnsService {
private final SnsClient snsClient;
private final String topicArn;
public SnsService(@Value("${aws.sns.topicArn}") String topicArn,
@Value("${aws.region}") String region) {
this.snsClient = SnsClient.builder()
.region(Region.of(region))
.credentialsProvider(DefaultCredentialsProvider.create())
.build();
this.topicArn = topicArn;
}
public void publishMessage(String message) {
PublishRequest request = PublishRequest.builder()
.message(message)
.topicArn(topicArn)
.build();
PublishResponse result = snsClient.publish(request);
System.out.println(result.messageId() + " Message sent.");
}
}
步骤四:在控制器中使用SNS服务
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/sns")
public class SnsController {
private final SnsService snsService;
public SnsController(SnsService snsService) {
this.snsService = snsService;
}
@PostMapping("/publish")
public String publishMessage(@RequestParam String message) {
snsService.publishMessage(message);
return "Message published!";
}
}
总结
以上示例展示了如何在Spring Boot中与AWS SQS和SNS进行交互。需要注意的是,AWS SDK的版本更新较快,所以要确保使用最新版本的SDK。另外,生产环境中应采用更严格的安全措施,如使用IAM角色、配置策略等。
浙公网安备 33010602011771号