Spring Cloud AWS - メッセージングのサポート

最後の記事では、AWSメッセージングサポートに進みます。

1 AWSメッセージングのサポート

1.1. SQS(シンプルキューサービス)

QueueMessagingTemplate を使用してSQSキューにメッセージを送信できます。

このBeanを作成するには、Spring Bootスターターを使用するときにアプリケーションコンテキストでデフォルトで利用可能な AmazonSQSAsync クライアントを使用できます。

@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 アノテーションを使用してメッセージヘッダを取得することもできます。

最初のパラメーターが StringではなくカスタムJavaオブジェクトの場合、 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)、Eメール、および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 アノテーションにトピック名を追加する必要があります。** このコントローラは、SNSトピックが購読を作成するために使用するHTTPエンドポイント /topic-subscriber を有効にします。

例えば、URLを呼び出すことでトピックを購読することができます。

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

** リクエストのヘッダは、3つのメソッドのうちどちらを呼び出すかを決定します。

__ @ NotificationSubscriptionMapping__アノテーションを持つメソッドは、ヘッダー__[x-amz-sns-message-type = SubscriptionConfirmation]__が存在し、トピックへの新しいサブスクリプションを確認するときに呼び出されます。

購読すると、トピックはヘッダー__[x-amz-sns-message-type = Notification]__を付けてエンドポイントに通知を送信します。これにより、__ @ NotificationMessageMapping__というアノテーションが付けられたメソッドが呼び出されます。

最後に、エンドポイントがトピックから購読を中止すると、確認要求がヘッダー__[x-amz-sns-message-type = UnsubscribeConfirmation]__とともに受信されます。

これは、@ @ NotificationUnsubscribeConfirmationMapping__というアノテーションが付けられたメソッドを呼び出します。

__ @ RequestMapping__の値は、購読しているトピック名とは無関係です。

[[messaging]]

===  **  2結論**

この最後の記事では、Spring CloudによるAWSメッセージングのサポートについて説明しました。これで、Spring CloudとAWSに関するこのクイックシリーズは終了です。

** «** 前へ

https://www.baeldung.com/spring-cloud-aws-rds[Spring Cloud AWS  -  RDS]