Springboot 監聽 S3 的 SQS

gongchengship發表於2024-07-09

為了讓Spring Boot應用監聽來自AWS S3的事件並透過SQS接收這些事件,您需要進行以下步驟:

  1. 建立和配置AWS S3和SQS

    • 建立一個S3儲存桶。
    • 建立一個SQS佇列。
    • 配置S3儲存桶的事件通知,將事件傳送到SQS佇列。
  2. 設定Spring Boot專案

    • 新增必要的依賴項。
    • 配置AWS SDK的憑證和區域。
    • 建立一個監聽SQS訊息的元件。

1. 建立和配置AWS S3和SQS

在AWS管理控制檯中執行以下操作:

建立S3儲存桶

  1. 開啟S3控制檯,建立一個新的儲存桶。
  2. 在儲存桶的"屬性"標籤下,選擇"事件通知"。
  3. 新增一個新的事件通知,將特定的S3事件(例如物件建立)傳送到SQS佇列。

建立SQS佇列

  1. 開啟SQS控制檯,建立一個新的SQS佇列。
  2. 記下佇列的URL和ARN(Amazon Resource Name)。

配置S3事件通知

  1. 返回到S3儲存桶的事件通知配置,選擇目標型別為SQS,並選擇剛剛建立的SQS佇列。

2. 設定Spring Boot專案

新增必要的依賴項

pom.xml中新增AWS SDK和Spring Cloud AWS的依賴項:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-aws-messaging</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-aws</artifactId>
</dependency>

配置AWS憑證和區域

application.ymlapplication.properties檔案中配置AWS憑證和區域:

cloud:
  aws:
    credentials:
      accessKey: YOUR_AWS_ACCESS_KEY
      secretKey: YOUR_AWS_SECRET_KEY
    region:
      static: YOUR_AWS_REGION
    stack:
      auto: false
    sqs:
      queue-url: YOUR_SQS_QUEUE_URL

確保替換YOUR_AWS_ACCESS_KEYYOUR_AWS_SECRET_KEYYOUR_AWS_REGIONYOUR_SQS_QUEUE_URL為您的實際AWS憑證和SQS佇列URL。

建立一個監聽SQS訊息的元件

import org.springframework.cloud.aws.messaging.listener.annotation.SqsListener;
import org.springframework.stereotype.Component;

@Component
public class S3EventListener {

    @SqsListener("YOUR_SQS_QUEUE_NAME")
    public void handleS3Event(String message) {
        // 處理收到的訊息
        System.out.println("Received S3 Event: " + message);

        // 可以將message解析為更具體的物件,視具體需求而定
    }
}

確保替換YOUR_SQS_QUEUE_NAME為您的實際SQS佇列名稱。

完整的Spring Boot應用程式

以下是完整的Spring Boot應用程式,包括必要的配置和S3事件監聽元件。

application.yml

spring:
  application:
    name: s3-sqs-listener

cloud:
  aws:
    credentials:
      accessKey: YOUR_AWS_ACCESS_KEY
      secretKey: YOUR_AWS_SECRET_KEY
    region:
      static: YOUR_AWS_REGION
    stack:
      auto: false
    sqs:
      queue-url: YOUR_SQS_QUEUE_URL

S3EventListener.java

import org.springframework.cloud.aws.messaging.listener.annotation.SqsListener;
import org.springframework.stereotype.Component;

@Component
public class S3EventListener {

    @SqsListener("YOUR_SQS_QUEUE_NAME")
    public void handleS3Event(String message) {
        // 處理收到的訊息
        System.out.println("Received S3 Event: " + message);

        // 可以將message解析為更具體的物件,視具體需求而定
    }
}

Application.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class S3SqsListenerApplication {

    public static void main(String[] args) {
        SpringApplication.run(S3SqsListenerApplication.class, args);
    }
}

測試

  1. 啟動Spring Boot應用程式。
  2. 將檔案上傳到配置的S3儲存桶。
  3. 檢查Spring Boot應用程式的控制檯輸出,驗證是否收到了S3事件的通知。

總結

透過配置S3儲存桶事件通知和SQS佇列,以及在Spring Boot應用中監聽SQS訊息,可以實現Spring Boot應用對S3事件的響應。這種方式允許應用程式在S3儲存桶中的物件發生變化時(例如物件建立、刪除)自動處理這些事件。

相關文章