Spring Cloud AWS –消息支持
在最後一篇文章中,我們將繼續介紹AWS Messaging支持。
1. AWS Messaging支持
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),電子郵件和SMS,該項目僅支持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端點- /topic-subscriber
,SNS主題可使用該端點創建預訂。
例如,我們可以通過調用URL來訂閱主題:
https://host:port/topic-subscriber/
請求中的標頭確定了調用這三種方法中的哪一種。
當標頭[x-amz-sns-message-type=SubscriptionConfirmation]
存在並確認對主題的新訂閱時,將調用帶有@NotificationSubscriptionMapping
批註的方法。
訂閱後,主題將使用標頭[x-amz-sns-message-type=Notification]
將通知發送到端點。這將調用以@NotificationMessageMapping
註釋的方法。
最後,當端點取消訂閱該主題時,會收到帶有標頭[x-amz-sns-message-type=UnsubscribeConfirmation]
的確認請求。
這將調用以@NotificationUnsubscribeConfirmationMapping
註釋的方法,該方法確認取消訂閱操作。
請注意,@ @RequestMapping
中的值與其預訂的主題名稱無關。
2.結論
在最後一篇文章中,我們探討了Spring Cloud對AWS Messaging的支持-總結了有關Spring Cloud和AWS的快速系列。
和往常一樣,這些示例可以在GitHub上找到。