かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

Spring Boot で書籍の貸出状況確認・貸出申請する Web アプリケーションを作る ( その3 )( RabbitMQ ( Windows 版 ) のインストール )

概要

Spring Boot で書籍の貸出状況確認・貸出申請する Web アプリケーションを作る ( その2 )( Redis ( Windows 版 ) のインストール ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • RabbitMQ ( Windows 版 ) のインストール

参照したサイト・書籍

  1. RabbitMQ
    https://www.rabbitmq.com/

  2. RabbitMQ - Installing on Windows
    https://www.rabbitmq.com/install-windows.html

  3. Erlang - DOWNLOAD OTP 18.0
    http://www.erlang.org/download.html

  4. cloudpack技術情報サイト ホーム - RabbitMQ インストールや操作メモ、ちょっと濃い話
    http://blog.cloudpack.jp/2014/12/02/install-and-execute-rabbitmq-and-deep-story/

  5. どこよりも早い Spring Boot 1.2 解説
    http://www.slideshare.net/makingx/spring-boot12

    • P.23~25 の「JMS対応」の内容を参考にしました。
  6. Messaging with RabbitMQ
    https://spring.io/guides/gs/messaging-rabbitmq/

目次

  1. はじめに
  2. Erlang/OTP のダウンロード
  3. RabbitMQ のダウンロード
  4. Erlang/OTP のインストール
  5. RabbitMQ のインストール
  6. RabbitMQ のプラグインの有効化
  7. 動作確認用 Spring Boot アプリケーションの作成
  8. 動作確認

手順

はじめに

RabbitMQ は公式サイトで Windows 向けのインストーラが配布されていますので、ダウンロードしてインストールします。また RabbitMQ は Erlang で開発されていますので、Erlang もインストールします。

Erlang/OTP のダウンロード

  1. 以下の URL のページ内の「OTP 18.0 Windows 64-bit Binary File」リンクをクリックしてインストーラ otp_win64_18.0.exe をダウンロードします。

    http://www.erlang.org/download.html

RabbitMQ のダウンロード

  1. 以下の URL のページ内の「rabbitmq-server-3.5.3.exe」リンクをクリックしてインストーラ rabbitmq-server-3.5.3.exe をダウンロードします。

    https://www.rabbitmq.com/install-windows.html

Erlang/OTP のインストール

  1. otp_win64_18.0.exe を実行します。

  2. Erlang OTP 18 Setup」ダイアログが表示されます。「Next >」ボタンをクリックします。

  3. 「Choose Install Location」画面が表示されます。「Destination Folder」の値を C:\Erlang\18.0 へ変更した後、「Next >」ボタンをクリックします。

  4. 「Choose Start Menu Folder」画面が表示されます。画面下部の「Do not create shortcuts」チェックボックスをチェックした後、「Install」ボタンをクリックします。

  5. 「Installing」画面が表示されインストールが開始されます。

  6. インストール中に「Microsoft Visual C++ 2010 x64 Redistributable セットアップ」ダイアログが表示されます。「同意する」チェックボックスをチェックした後、「インストール」ボタンをクリックします。

  7. 「インストールの進行状況」画面が表示されインストールが実行されます。

  8. インストールが完了すると「インストールが完了しました」画面が表示されます。「完了」ボタンをクリックします。

  9. Erlangインストーラに戻り、インストールが継続されます。

  10. インストールが完了すると「Installation Complete」画面が表示されます。「Close」ボタンをクリックします。

RabbitMQ のインストール

  1. rabbitmq-server-3.5.3.exe を実行します。

  2. 「RabbitMQ Server 3.5.3 Setup」ダイアログが表示されます。「Next >」ボタンをクリックします。

  3. 「Choose Install Location」画面が表示されます。「Destination Folder」の値を C:\RabbitMQ\3.5.3 へ変更した後、「Install」ボタンをクリックします。

  4. 「Installing」画面が表示されインストールが開始されます。

  5. インストールが完了すると「Completing the RabbitMQ Server 3.5.3 Setup Wizard」画面が表示されます。「Finish」ボタンをクリックします。

  6. インストーラでインストールすると自動的にサービスとして登録され、開始されています。

    f:id:ksby:20150628165854p:plain

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/ へアクセスし、管理機能のログイン画面が表示されることを確認します。

f:id:ksby:20150628171834p:plain

デフォルトの設定は Username、Password どちらも "guest" です。guest/guest を入力してログインし、ログインできることを確認します。

f:id:ksby:20150628182605p:plain

動作確認用 Spring Boot アプリケーションの作成

簡単な Spring Boot アプリケーションを作成して動作確認します。ディレクトリ構成とソースファイルのみ記載します。詳細な構築手順は書きません ( GitHub にも上げません )。

以下の仕様で作成します。

  • メッセージを送受信するための Queue の名前は "queue-test" にします。RabbitMQ にこの Queue が存在しない場合には Web アプリケーションが自動作成します。
  • http://localhost:8080/test にアクセスすると "RabbitMQ Test" のメッセージを送信します。
  • "queue-test" Queue にメッセージがあると受信して標準出力に出力します。

ディレクトリ構成は以下の通りです。

f:id:ksby:20150628190153p:plain

以下のファイルを作成します。

動作確認

  1. 最初にメッセージが正常に送信されることだけを確認したいので、src/main/java/project/rabbitmqtest/MessageReceiver.java@RabbitListener(queues = {"queue-test"}) の行をコメントアウトしておきます。

  2. Gradle projects View から bootRun タスクを実行して Tomcat を起動します。

  3. ブラウザから http://localhost:8080/test にアクセスします。RabbitMQ にメッセージが送信されて、管理画面の「Queued messages」の「Total」の件数が 1 になります。

    f:id:ksby:20150628201001p:plain

    "queue-test" Queue も作成されていることが確認できます。

    f:id:ksby:20150628204205p:plain

    メッセージを取り出すと "RabbitMQ Test" であることも確認できます。

    f:id:ksby:20150628201518p:plain

  4. 次は送信後に受信できることを確認します。src/main/java/project/rabbitmqtest/MessageReceiver.java を元に戻します。

  5. Ctrl+F5 を押して Tomcat を再起動します。

  6. ブラウザから http://localhost:8080/test にアクセスします。メッセージが送信→受信され、"RabbitMQ Test" の文字列が IntelliJ IDEA のコンソールに出力されます。

    f:id:ksby:20150628202439p:plain

  7. Ctrl+F2 を押して Tomcat を停止します。

  8. 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
初版発行。