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