知識庫 / Spring / Spring Cloud RSS 訂閱

Spring Cloud AWS – 消息支持

Spring Cloud
HongKong
8
02:08 PM · Dec 06 ,2025

在最終文章中,我們將深入探討 AWS 消息支持。

內容系列:
本文是系列的一部分
• Spring Cloud AWS – S3
• Spring Cloud AWS – EC2
• Spring Cloud AWS – RDS
• Spring Cloud AWS – 消息支持 (當前文章)

1. AWS 消息支持

1.1. SQS(簡單隊列服務)

我們可以使用 QueueMessagingTemplate 發送消息到 SQS 隊列。

要創建此 Bean,可以使用默認情況下在應用程序上下文中可用的 AmazonSQSAsync 客户端:當使用 Spring Boot 啓動器時。

@Bean
public QueueMessagingTemplate queueMessagingTemplate(
  AmazonSQSAsync amazonSQSAsync) {
    return new QueueMessagingTemplate(amazonSQSAsync);
}

然後,我們可以使用 convertAndSend() 方法發送消息:

@Autowired
QueueMessagingTemplate messagingTemplate;
 
public void send(String topicName, Object message) {
    messagingTemplate.convertAndSend(topicName, message);
}

由於 Amazon SQS 僅接受 String 類型的負載,Java 對象會自動序列化為 JSON。

我們還可以使用 @SqsListener 配置監聽器:

@SqsListener("spring-cloud-test-queue")
public void receiveMessage(String message, 
  @Header("SenderId") String senderId) {
    // ...
}

此方法將接收來自 spring-cloud-test-queue 的消息,然後處理這些消息。 此外,我們還可以使用在方法參數上對 @Header 註解進行標註的方式,來檢索消息頭信息。

如果第一個參數是自定義的 Java 對象而不是 String,Spring 將使用 JSON 轉換將消息轉換為該類型。

1.2. SNS(簡單通知服務)

類似於 SQS,我們可以使用 NotificationMessagingTemplate 將消息發佈到主題。

要創建它,我們需要一個 AmazonSNS 客户端:

@Bean
public NotificationMessagingTemplate notificationMessagingTemplate(
  AmazonSNS amazonSNS) {
    return new NotificationMessagingTemplate(amazonSNS);
}

然後,我們可以向主題發送通知:

@Autowired
NotificationMessagingTemplate messagingTemplate;

public void send(String Object message, String subject) {
    messagingTemplate
      .sendNotification("spring-cloud-test-topic", message, subject);
}

從 AWS 支持的多個 SNS 端點中,包括 SQS、HTTP(S)、電子郵件和短信,該項目僅支持 HTTP(S)

我們可以配置端點在 MVC 控制器中:

@Controller
@RequestMapping("/topic-subscriber")
public class SNSEndpointController {

    @NotificationSubscriptionMapping
    public void confirmUnsubscribeMessage(
      NotificationStatus notificationStatus) {
        notificationStatus.confirmSubscription();
    }
 
    @NotificationMessageMapping
    public void receiveNotification(@NotificationMessage String message, 
      @NotificationSubject String subject) {
        // handle message
    }

    @NotificationUnsubscribeConfirmationMapping
    public void confirmSubscriptionMessage(
      NotificationStatus notificationStatus) {
        notificationStatus.confirmSubscription();
    }
}

我們需要在控制器級別的@RequestMapping註解中添加主題名稱。該控制器啓用一個 HTTP(s) 端點——/topic-subscriber,用於由 SNS 主題創建訂閲。

例如,我們可以通過調用 URL 訂閲主題:

https://host:port/topic-subscriber/

請求頭中的標示符決定將調用哪一種方法。

當請求頭中包含且值為 @NotificationSubscriptionMapping 註解時,將調用該方法,以確認對主題的新訂閲。

訂閲成功後,主題將向具有請求頭 @RequestMapping 的端點發送通知。這將調用帶有 @NotificationMessageMapping 註解的方法。

最後,當端點取消訂閲主題時,將收到帶有請求頭 @RequestMapping 的確認請求,以確認取消訂閲操作。

請注意,@RequestMapping 中的值與訂閲的主題名稱無關。

2. 結論

在本文中,我們探討了 Spring Cloud 對 AWS 消息服務的支持,這標誌着關於 Spring Cloud 和 AWS 的快速系列文章的結束。

« 上一篇
Spring Cloud AWS – RDS
user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.