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角色、配置策略等。

posted @ 2024-08-01 01:13  gongchengship  阅读(40)  评论(0)    收藏  举报