Spring Cloud AWSでメッセージングを試す

Spring Cloud for Amazon Web Servicesを使って、メッセージングを行うサンプルを作った。前から気になっていたので、年内に触れて良かった。

サンプルプロジェクトはexample/Spring/SQSApp - GitHub にあります。

アプリケーションの起動でエラーになる

Spring Initializrでダウンロードしたプロジェクトを起動しようとしてもエラーになる。spring-cloud-starter-awsがローカル環境でエラーになる場合の最低限の対応 - 文系プログラマによるTIPSブログで書かれている通りで、EC2上で動かすことを前提にしているようだ。

ローカルで動かす設定にしても、EC2 metadata resolution related exception thrown when running application locally · Issue #556 · spring-cloud/spring-cloud-aws · GitHubと同じエラーが出力される。一応動いてはいるが、エラーメッセージが気になる。仕方なくloggingの設定でエラーを見なくしている。いいのかこれ。

これらを合わせて、application.ymlのようになった。

アプリケーションの作り

公式サイト 5. Messaging に書かれている通りで動く。Spring Bootのアプリケーションに簡単に統合できるのがいいなと思った。

メッセージ削除のポリシー

@SqsListenerでメッセージを待ち受ける事ができるんだけど、メッセージを削除するタイミングが分からなかった。メッセージを削除方法はdeletionPolicyで指定できる。HelloMessageReceiver.ktではSqsMessageDeletionPolicy.ON_SUCCESSを指定するようにした。これで例外の発生時にメッセージを削除しないような動きにできる。

@SqsListenerのカスタマイズ

@SqsListenerでのメッセージ待ち受けのカスタマイズもできる。SqsConfig.ktのように記載することで、スレッド数の変更やSQSからの取得数の変更が可能。

ショートポーリング

以下のIssueが上がっているので、ショートポーリングを使っているようだ。APIのリクエスト数が増えそうだ。

Enable long polling in QueueMessagingTemplate · Issue #646 · spring-cloud/spring-cloud-aws · GitHub

投稿日 2020年12月27日