Spring Boot で書籍の貸出状況確認・貸出申請する Web アプリケーションを作る ( その3 )( RabbitMQ ( Windows 版 ) のインストール )
概要
Spring Boot で書籍の貸出状況確認・貸出申請する Web アプリケーションを作る ( その2 )( Redis ( Windows 版 ) のインストール ) の続きです。
- 今回の手順で確認できるのは以下の内容です。
- RabbitMQ ( Windows 版 ) のインストール
参照したサイト・書籍
RabbitMQ
https://www.rabbitmq.com/RabbitMQ - Installing on Windows
https://www.rabbitmq.com/install-windows.htmlErlang - DOWNLOAD OTP 18.0
http://www.erlang.org/download.htmlcloudpack技術情報サイト ホーム - RabbitMQ インストールや操作メモ、ちょっと濃い話
http://blog.cloudpack.jp/2014/12/02/install-and-execute-rabbitmq-and-deep-story/どこよりも早い Spring Boot 1.2 解説
http://www.slideshare.net/makingx/spring-boot12- P.23~25 の「JMS対応」の内容を参考にしました。
Messaging with RabbitMQ
https://spring.io/guides/gs/messaging-rabbitmq/
目次
- はじめに
- Erlang/OTP のダウンロード
- RabbitMQ のダウンロード
- Erlang/OTP のインストール
- RabbitMQ のインストール
- RabbitMQ のプラグインの有効化
- 動作確認用 Spring Boot アプリケーションの作成
- 動作確認
手順
はじめに
RabbitMQ は公式サイトで Windows 向けのインストーラが配布されていますので、ダウンロードしてインストールします。また RabbitMQ は Erlang で開発されていますので、Erlang もインストールします。
Erlang/OTP のダウンロード
RabbitMQ のダウンロード
以下の URL のページ内の「rabbitmq-server-3.5.3.exe」リンクをクリックしてインストーラ rabbitmq-server-3.5.3.exe をダウンロードします。
Erlang/OTP のインストール
otp_win64_18.0.exe を実行します。
「Erlang OTP 18 Setup」ダイアログが表示されます。「Next >」ボタンをクリックします。
「Choose Install Location」画面が表示されます。「Destination Folder」の値を
C:\Erlang\18.0
へ変更した後、「Next >」ボタンをクリックします。「Choose Start Menu Folder」画面が表示されます。画面下部の「Do not create shortcuts」チェックボックスをチェックした後、「Install」ボタンをクリックします。
「Installing」画面が表示されインストールが開始されます。
インストール中に「Microsoft Visual C++ 2010 x64 Redistributable セットアップ」ダイアログが表示されます。「同意する」チェックボックスをチェックした後、「インストール」ボタンをクリックします。
「インストールの進行状況」画面が表示されインストールが実行されます。
インストールが完了すると「インストールが完了しました」画面が表示されます。「完了」ボタンをクリックします。
インストールが完了すると「Installation Complete」画面が表示されます。「Close」ボタンをクリックします。
RabbitMQ のインストール
rabbitmq-server-3.5.3.exe を実行します。
「RabbitMQ Server 3.5.3 Setup」ダイアログが表示されます。「Next >」ボタンをクリックします。
「Choose Install Location」画面が表示されます。「Destination Folder」の値を
C:\RabbitMQ\3.5.3
へ変更した後、「Install」ボタンをクリックします。「Installing」画面が表示されインストールが開始されます。
インストールが完了すると「Completing the RabbitMQ Server 3.5.3 Setup Wizard」画面が表示されます。「Finish」ボタンをクリックします。
インストーラでインストールすると自動的にサービスとして登録され、開始されています。
RabbitMQ のプラグインの有効化
コマンドプロンプトを起動し、以下のコマンドを実行します。
>cd /d C:\RabbitMQ\3.5.3\rabbitmq_server-3.5.3\sbin >rabbitmq-plugins.bat enable rabbitmq_shovel >rabbitmq-plugins.bat enable rabbitmq_management >rabbitmq-plugins.bat enable rabbitmq_shovel_management
ブラウザを起動して http://localhost:15672/ へアクセスし、管理機能のログイン画面が表示されることを確認します。
デフォルトの設定は Username、Password どちらも "guest" です。guest/guest を入力してログインし、ログインできることを確認します。
動作確認用 Spring Boot アプリケーションの作成
簡単な Spring Boot アプリケーションを作成して動作確認します。ディレクトリ構成とソースファイルのみ記載します。詳細な構築手順は書きません ( GitHub にも上げません )。
以下の仕様で作成します。
- メッセージを送受信するための Queue の名前は "queue-test" にします。RabbitMQ にこの Queue が存在しない場合には Web アプリケーションが自動作成します。
- http://localhost:8080/test にアクセスすると "RabbitMQ Test" のメッセージを送信します。
- "queue-test" Queue にメッセージがあると受信して標準出力に出力します。
ディレクトリ構成は以下の通りです。
以下のファイルを作成します。
- build.gradle
- src/main/java/project/rabbitmqtest/Application.java
- src/main/java/project/rabbitmqtest/MessageReceiver.java
- src/main/java/project/rabbitmqtest/TestController.java
- src/main/resources/application.properties
動作確認
最初にメッセージが正常に送信されることだけを確認したいので、src/main/java/project/rabbitmqtest/MessageReceiver.java の
@RabbitListener(queues = {"queue-test"})
の行をコメントアウトしておきます。Gradle projects View から bootRun タスクを実行して Tomcat を起動します。
ブラウザから http://localhost:8080/test にアクセスします。RabbitMQ にメッセージが送信されて、管理画面の「Queued messages」の「Total」の件数が 1 になります。
"queue-test" Queue も作成されていることが確認できます。
メッセージを取り出すと "RabbitMQ Test" であることも確認できます。
次は送信後に受信できることを確認します。src/main/java/project/rabbitmqtest/MessageReceiver.java を元に戻します。
Ctrl+F5 を押して Tomcat を再起動します。
ブラウザから http://localhost:8080/test にアクセスします。メッセージが送信→受信され、"RabbitMQ Test" の文字列が IntelliJ IDEA のコンソールに出力されます。
Ctrl+F2 を押して Tomcat を停止します。
RabbitMQ から "queue-test" Queue を削除しておきます。
正常に動作することが確認できましたので、次へ進みます。
ソースコード
build.gradle
buildscript { repositories { jcenter() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.4.RELEASE") } } apply plugin: 'java' apply plugin: 'spring-boot' apply plugin: 'idea' jar { baseName = 'rabbitmqtest' version = '0.0.1-SNAPSHOT' } idea { module { inheritOutputDirs = false outputDir = file("$buildDir/classes/main/") } } repositories { jcenter() } dependencies { // spring-boot-gradle-plugin によりバージョン番号が自動で設定されるもの // Appendix E. Dependency versions ( http://docs.spring.io/spring-boot/docs/current/reference/html/appendix-dependency-versions.html ) 参照 compile("org.springframework.boot:spring-boot-starter-web") compile("org.springframework.boot:spring-boot-starter-amqp") testCompile("org.springframework.boot:spring-boot-starter-test") // spring-boot-gradle-plugin によりバージョン番号が自動で設定されないもの }
Application.java
package project.rabbitmqtest; import org.springframework.amqp.core.Queue; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } /** * Queue Bean を作成しておくと、メッセージ送信時に Queue が存在しない場合には * 自動的に RabbitMQ 上に作成します。 * * @return */ @Bean public Queue queue() { return new Queue("queue-test", false); } }
MessageReceiver.java
package project.rabbitmqtest; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; @Component public class MessageReceiver { @RabbitListener(queues = {"queue-test"}) public void receiveMessage(String message) { System.out.println("★★★ messages = " + message); } }
TestController.java
package project.rabbitmqtest; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/test") public class TestController { @Autowired private RabbitTemplate rabbitTemplate; @RequestMapping @ResponseBody public String index() { // RabbitMQ へメッセージを送信する rabbitTemplate.convertAndSend("queue-test", "RabbitMQ Test"); return "RabbitMQ Test"; } }
application.properties
spring.rabbitmq.host=localhost spring.rabbitmq.port=5672
履歴
2015/06/28
初版発行。