はじめに
一般的に、システム間の連携は疎結合であることが望ましいとされています。その理由はさまざまですが、異なるシステム間での連携を疎結合にすると変更しやすい、障害時の影響を小さくしやすい、などがあげられます。
そういった実装を行うにあたって、しばしば利用されるものが「メッセージキューイング」です。メッセージングキューイングとは、簡単に言うとアプリケーション間のデータをメッセージとして、そのやり取りをキューと呼ばれる領域を利用して行うものです。メッセージキューイングでは送信側はメッセージの送信後、処理結果を待たずに次の処理を行うため、非同期に処理を行うことが可能となります。このように、メッセージキューイングを利用することでシステム間を疎結合にするだけでなく、部分的なスケールアウトを容易に行えるなどのメリットがあります。
メッセージキューイングのオープンなプロトコルとしてAMQP(Advanced Message Queuing Protocol)というものがあり、その実装にはいくつかあります。RabbitMQはAMQPの代表的な実装の一つでありVMware社よりオープンソースソフトウェアとして提供されています。この連載では、RabbitMQの導入から、JavaでRabbitMQを利用した開発をSpring AMQPというフレームワークを利用して行う場合の基礎をソースコードとともに解説します。
対象読者
RabbitMQを利用したJavaアプリケーションの開発を行いたいと考えている方。
Spring AMQPとは
Spring AMQPとは、オープンソースのフレームワークとして有名なSpring Frameworkのサブプロジェクトとして提供されているフレームワークです。Spring AMQPを利用することで取り出したメッセージからオブジェクトへの変換が容易になったり、オブジェクトを利用してメッセージの送受信を行うことができるようになります。送受信そのものはもちろん、キューをモニタするリスナーの実装も簡単に行うことができます。なお、Spring AMQPには今回解説するJava版だけではなく.NET版も存在します。
RabbitMQの導入
まずはRabbitMQのセットアップを行います。RabbitMQのインストールには、RabbitMQ本体のほか、Erlangが必要となりますので、Erlangを導入した上でRabbitMQのインストールを行います。とはいえRabbitMQのインストール自体は、配布されているファイルを展開するだけです。
今回は一般的なUNIX用のインストールを行いますが、Debian/Ubuntu向け、RHEL/CentOS向けにパッケージ化されているものも配布されていますので、各パッケージ管理システムを利用した導入も可能です。
まずはErlangの最新版を、ダウンロードサイトからダウンロードします。筆者の環境はMacなので、今回は「Erlang R15B03 64bit.dmg」を使います。ご利用の環境に応じて適宜読み替えてください。
インストーラを起動すると以降はウィザード形式で進みますが今回はすべてデフォルトのままとしました。インストールが完了しましたら、ターミナルを開いて「erl」と入力してみましょう。正常にインストールされている場合は、以下のような画面が表示されます。
$ erl Erlang R15B03 (erts-5.9.3) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false] Eshell V5.9.3 (abort with ^G) 1>
終了する場合は「q().」と入力してください。最後のドットも必要です。
続いてRabbitMQをインストールします。ダウンロードページから、今回はtar.gz版をダウンロードします。
ダウンロードが完了したら、任意のディレクトリで解凍・展開します。
$ tar xvfz rabbitmq-server-generic-unix-3.0.1.tar.gz
本連載はMac上で開発しています。Macをご利用の方で簡単にローカルマシンに導入して試してみたい場合、上記の方法以外に、Macで利用可能なパッケージ管理システムであるHomebrew/Macportsを利用して導入することも可能です。
動作確認
では実際に、インストールしたRabbitMQを起動してみましょう。起動の前に、管理用のコマンドラインやWebベースの管理画面を利用できるようにしておきます。そしてターミナルを開き、展開したディレクトリに移動します。
$ sudo ./sbin/rabbitmq-plugins enable rabbitmq_management $ sudo ./sbin/rabbitmq-server -detached
1行目のコマンドはRabbitMQのプラグインを有効化するコマンドです。今回は管理用のWebインターフェースやコマンドラインを提供するrabbitmq_managementというプラグインを有効化しました。また、起動時のオプションに-detachedをつけることでバックグラウンドで起動されます。
続いてWebで提供されている管理画面にアクセスします。ブラウザから、http://localhost:55672/にアクセスしてください。インストール直後の初期ユーザ名とパスワードは「guest」「guest」となっています。
停止は以下のコマンドで行えます。
$ sudo sbin/rabbitmqctl stop