ActiveMQでメッセージキューを実装する

ActiveMQとは

ActiveMQとは、Java Message Serviceを実装したメッセージ関連のミドルウェアです。ActiveMQをインストールすることで、アプリケーションは非同期型のメッセージキューイングを行うことができます。メッセージを非同期にやり取りするため、一時的にシステムがダウンしても影響を受けずに処理を再開させることが可能です。以下のような感じです。

cluster_activemq

ActiveMQのインストール

ActiveMQはソースコードで提供されていますが、RPMの作成も可能です。ここではいったんRPMを作成してインストールする手順を解説します。

起動スクリプトを作成します(ここではinit.sh)。

ActiveMQのRPMのspecファイルを作成します。

RPMを作成します。

これで~/rpm/RPMにapache-activemq.rpmが作成されます。

ActiveMQのインストールと設定

先ほど作成したActiveMQのRPMをインストールし、JDKをインストールします。

これでActiveMQが起動しました。キュー管理画面にはhttp://localhost:8161/でアクセスできます(初期状態では認証が掛かっています。ユーザー名・パスワードはadmin / admin)。

activemq-admin

フェイルオーバー時にActiveMQとMySQLを連携させる

ActiveMQは予期せぬエラーでMessageBrokerが終了してしまった場合、未送信のメッセージを保持する機能を持っています。ここではフェイルオーバー時にMySQLに永続化させる設定を紹介します。まずデータベースサーバーでActiveMQ用のデータベースを作成します。

ActiveMQサーバーでテンプレートファイル(activemq-jdbc.xml)をactivemq.xmlとしてリネームします。

さらにactivemq.xmlを開いて、 brokerのpersistence要素を変更します。

MySQL公式サイトからJavaコネクタをダウンロードしてClasspathの通っているディレクトリに配置します。

これでActiveMQを再起動させると、MySQLデータベースに以下のテーブルが作成されていることが確認できます。

エラーが発生する場合

activemq.xmlが以下のような記述の場合、エラーが発生します。

journaledJDBCではなく、jdbcPersistenceAdapterとしてXMLに記述する必要があるようです。これを解決するまで2時間掛かりました…。

関連記事

この記事をシェアする