為了讓Spring Boot應用監聽來自AWS S3的事件並透過SQS接收這些事件,您需要進行以下步驟:
-
建立和配置AWS S3和SQS:
- 建立一個S3儲存桶。
- 建立一個SQS佇列。
- 配置S3儲存桶的事件通知,將事件傳送到SQS佇列。
-
設定Spring Boot專案:
- 新增必要的依賴項。
- 配置AWS SDK的憑證和區域。
- 建立一個監聽SQS訊息的元件。
1. 建立和配置AWS S3和SQS
在AWS管理控制檯中執行以下操作:
建立S3儲存桶
- 開啟S3控制檯,建立一個新的儲存桶。
- 在儲存桶的"屬性"標籤下,選擇"事件通知"。
- 新增一個新的事件通知,將特定的S3事件(例如物件建立)傳送到SQS佇列。
建立SQS佇列
- 開啟SQS控制檯,建立一個新的SQS佇列。
- 記下佇列的URL和ARN(Amazon Resource Name)。
配置S3事件通知
- 返回到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.yml
或application.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_KEY
、YOUR_AWS_SECRET_KEY
、YOUR_AWS_REGION
和YOUR_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);
}
}
測試
- 啟動Spring Boot應用程式。
- 將檔案上傳到配置的S3儲存桶。
- 檢查Spring Boot應用程式的控制檯輸出,驗證是否收到了S3事件的通知。
總結
透過配置S3儲存桶事件通知和SQS佇列,以及在Spring Boot應用中監聽SQS訊息,可以實現Spring Boot應用對S3事件的響應。這種方式允許應用程式在S3儲存桶中的物件發生變化時(例如物件建立、刪除)自動處理這些事件。