Spring Boot 1.5.x の Web アプリを 2.0.x へバージョンアップする ( その8 )( 一旦動作確認し、動作しない点があれば修正する )
概要
記事一覧はこちらです。
- 今回の手順で確認できるのは以下の内容です。
- ここまでいろいろ変更したので Tomcat を起動して画面から正常に動作するか確認し、動作しない点があれば修正します。
参照したサイト・書籍
correlation id missing when trying to communicate between different rabbitmq rpc library
https://github.com/spring-projects/spring-amqp/issues/657Spring AMQP - 3.3.3 Stock Trading
https://docs.spring.io/spring-amqp/docs/current/reference/html/reference.html#stock_trading
目次
手順
動作確認1
動作確認前に DB のデータを以下の状態にします。
- user_info, user_role テーブルのデータは開発時のままにします。
- lending_app, lending_book, library_forsearch テーブルのデータはクリアします。
メールを受信するので smtp4dev を起動します。
Tomcat を起動後、以下の手順で動作確認します。
ブラウザを起動して http://localhost:8080/ にアクセスしてログイン画面を表示します。tanaka.taro@sample.com / taro でログインします。
検索対象図書館登録画面が表示されます。"東京都" で検索した後、一覧表示されている図書館から「国立国会図書館東京本館」を選択します。
ログアウトします。
- ログイン画面に戻るので suzuki.hanako@test.co.jp / hanako でログインします。
- 貸出希望書籍 CSV ファイルアップロード画面が表示されます。以下の内容が記述された CSV ファイルをアップロードします。
"ISBN","書名"
"978-4-7741-6366-6","GitHub実践入門"
"978-4-7741-5377-3","JUnit実践入門"
"978-4-7973-8014-9","Java最強リファレンス"
"978-4-7973-4778-4","アジャイルソフトウェア開発の奥義"
"978-4-87311-704-1","Javaによる関数型プログラミング"
この後メールが送信されてくるはずですが、メールは送信されず NullPointerException が延々と発生していました。
RabbitMQ へのメッセージ送信時に correlationId を付けるよう修正する
NullPointerException が発生している org.springframework.amqp.core.MessageProperties.hashCode(MessageProperties.java:528) をクリックしてみると result = prime * result + this.correlationId.hashCode();
のところでした。Spring Boot 1.5.x の Web アプリを 2.0.x へバージョンアップする ( その4 )( AbstractJsonpResponseBodyAdvice を削除し、失敗しているテストを成功させる ) に書きましたが、2.0 にバージョンアップするとメッセージ送信時に correlationId を必ずセットしないといけなくなっているのですが、セットしていないのが原因のようです。
correlationId は自動で一意の値を割り当ててもらえれば良さそうに思えたので何か方法がないか調べたところ、Spring AMQP - 3.3.3 Stock Trading のページに UUID.randomUUID().toString()
を使う方法が記載されていました。今回はこの方法を使うことにします。
メッセージを送信している src/main/java/ksbysamplevwebapp/lending/service/queue/InquiringStatusOfBookQueueService.java の sendMessage メソッドを以下のように変更します。
public void sendMessage(Long lendingAppId) { InquiringStatusOfBookQueueMessage body = new InquiringStatusOfBookQueueMessage(); body.setLendingAppId(lendingAppId); Message message = converter.toMessage(body , MessagePropertiesBuilder.newInstance().setCorrelationId(UUID.randomUUID().toString()).build()); rabbitTemplate.send(Constant.QUEUE_NAME_INQUIRING_STATUSOFBOOK, message); }
Message message = converter.toMessage(body, MessagePropertiesBuilder.newInstance().setCorrelationId(UUID.randomUUID().toString()).build());
を追加します。- メッセージ送信時に呼び出すメソッドを
rabbitTemplate.convertAndSend
→rabbitTemplate.send
に変更します。
動作確認2
RabbitMQ、Tomcat を再起動して最初からやり直します。
- 「貸出状況を確認しました」のメールが送信されるので、メールに記述されている URL にアクセスします。
- 貸出申請画面が表示されます。3冊程「申請する」を選択して申請します。
- ログアウトします。
- 「貸出申請がありました」のメールが送信されるので、メールに記述されている URL にアクセスします。ログイン画面が表示されるので、tanaka.taro@sample.com / taro でログインします。
- 貸出承認画面が表示されます。「承認」あるいは「却下」を選択して確定させます。
- ログアウトします。
- 「貸出申請が承認・却下されました」のメールが送信されるので、メールに記述されている URL にアクセスします。ログイン画面が表示されるので、suzuki.hanako@test.co.jp / hanako でログインします。
- 貸出申請結果確認画面が表示されるので内容を確認します。
動作しなかったのは RabbitMQ へのメッセージ送受信のところだけでした。
次回は。。。
以下の順に進める予定です。
- gradle-errorprone-plugin を 0.0.16 → 0.6 へバージョンアップします。知らないうちに plugin の方が大きく変更されていました。
- Tomcat connection Pool → HikariCP に変更します。
履歴
2018/10/03
初版発行。