JBoss Fuseを使ってみる その4:A-MQ

2015年6月4日(木)
駒澤 健一郎

デモのダウンロード

今回の記事で利用するデモファイルを用意しましたので、以下のコマンドで Github上からローカルマシンにクローンします。このコマンドを実行したディレクトリが、プロジェクトのルートディレクトリとなります。

$ git clone https://github.com/kkomazaw/jboss-fuse-fsi-demo.git

JBDSを起動し、[Maven]−[Existing Maven Projects]でプロジェクトをインポートします(図11)。

プロジェクトのインポート

図11:プロジェクトのインポート

Project Explorerペインに、下記の4つのプロジェクトがインポートされたことを確認します。

  • file-listener(File Listenerマイクロサービス用プロジェクト)
  • fund-processor(Fund Processorマイクロサービス用プロジェクト)
  • fund-persister(Fund Persisterマイクロサービス用プロジェクト)
  • parent(上記3プロジェクトの親プロジェクト)

3つのプロジェクトにあるすべての src/main/resources/OSGI-INF/blueprint/blueprint.xml に、正しくactivemq のコンポーネントの設定がされていることを確認します(Sourceタブを開いて確認してください)。brokerURLプロパティに、「discovery:(fabric:default)」と記述することにより、Fabric上のdefaultグループに属する、masterのブローカーを自動的に検知し接続できます。

<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" >
<property name="brokerURL" value="discovery:(fabric:default)"/>
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
</bean>

まず、file-listenerプロジェクトのCamelルートを確認してみましょう(@{610212)。Project Explorerでsrc/main/resources/OSGI-INF/blueprint/blueprint.xmlをダブルクリックして開きます。

file-listenerプロジェクトのCamelルート

図12:file-listenerプロジェクトのCamelルート

3つ目のアイコンをクリックしてPropertiesタブを確認します。Uriプロパティに記述された設定により、「events.newfund」という名前のTopicに対し、メッセージを送信できます(図13)。

events.newfundという名称のTopicにメッセージが送信できるようになっている

図13:events.newfundという名称のTopicにメッセージが送信できるようになっている

今度は、fund-processorプロジェクトのCamelルートを確認しましょう(図14)。

fund-processorプロジェクトのCamelルート

図14:fund-processorプロジェクトのCamelルート

先頭のアイコンをクリックしPropertiesタブを確認します。先ほどのfile-listenerプロジェクトと同様に「activemq:topic:events.newfund」の設定があるだけですが、この設定によりfile-listenerから送信されたメッセージを受信できます。

このように、受信・送信の区別は設定されるエンドポイントの位置により自動的に判断されるため、非常にシンプルに記述できるのがFuseの特徴です。

3つめのfund-persisterプロジェクトでもfund-processorと同様に、file-listenerから送信されたメッセージを受信するように、先頭にactivemqエンドポイントを設定しています。また今回は説明を省略しますが、データベースアクセスを含む複雑なロジックを設定しています。

データベースの作成

Fund PersisterはApache Derbyを使用してログを保管します。Apache Derbyのサイトから、ソフトウェアをダウンロードします。解凍したディレクトリ(以下$DERBY_HOME)でDerbyサーバーを起動します。

$ $DERBY_HOME/bin/startNetworkServer -h localhost -p 1527

下記のコマンドを実行してデモテーブルを作成します(下記の/Users/kkomazaw/tempの部分は、任意の場所を選んでください)。

$ $DERBY_HOME/bin/ij
ij> connect 'jdbc:derby://localhost:1527//Users/kkomazaw/temp/opp.db;create=true';
ij> run '/<プロジェクトの場所>/jboss-fuse-fsi-demo/fund-persister/src/main/resources/sql/tables.sql';
ij> show tables;
ij> select * from funds;

jboss-fuse-fsi-demo/fund-persister/src/main/resources/SqlMapConfig.xmlのJDBCドライバURLを、上記で作成したDBのディレクトリに変更してください。

<dataSource type="POOLED">
    <property name="driver" value="org.apache.derby.jdbc.ClientDriver"/>
    <property name="url" value="jdbc:derby://localhost:1527//<指定したDBのディレクトリ>/opp.db"/>
    <property name="username" value="app"/>
    <property name="password" value="app"/>
</dataSource>

プロジェクトのデプロイ

fabricにプロジェクトをデプロイするため、Maven の~/.m2/settings.xmlに以下の設定をします。

<server>
<id>fabric8.upload.repo</id>
<username>admin</username>
<password>admin</password>
</server>

その後プロジェクトのルートディレクトリ(jboss-fuse-fsi-demoディレクトリ)で、以下のコマンドを実行してデプロイします。

$ mvn fabric8:deploy

JBoss Fuse Management Console で「Wiki」タブを開くと、Fabricレジストリにデプロイされたfsi プロファイルを参照できます。

fsiプロファイルの参照

図15:fsiプロファイルの参照

プロファイルは階層構造で整理されており、ドリルダウンすることで個別のプロファイルを参照できます(図16)。

個別のプロファイルを参照する

図16:個別のプロファイルを参照する

「Runtime」 タブを開くと、全てのコンテナのリストが参照できます。ここで右上の「Create」 ボタンをクリックし、新しいコンテナを作成します(図17)。

Runtimeタブで、新しいコンテナを作成する

図17:Runtimeタブで、新しいコンテナを作成する

「Profiles:」のテキストエリアに「file」と入力し、デプロイしたプロファイルを検索します。「file.listener」プロファイルが表示されるはずなので、これをチェックします。その後コンテナに「filelistener」と名前を付け、「Create And Start Container」ボタン をクリックしてコンテナを作成します(図18)。

作成するコンテナを設定する

図18:作成するコンテナを設定する

ここまで済んだら、Containerページで「filelistener」という名前のコンテナが作成されていることを確認してください(図19)。右側にらくだのマークがついているのがお分かりでしょうか? これでfilelistenerがCamelのコンテナであることが見分けられます。

filelistenerコンテナが確認できる。らくだのマークはCamelルートであることを表す

図19:filelistenerコンテナが確認できる。らくだのマークはCamelルートであることを表す

その他2つのプロファイルfund.persister と fund.processor も同様に、対応するコンテナを作成します。以下の図20のように表示されていれば、準備完了です。

3つのコンテナを作成し、準備が完了したところ

図20:3つのコンテナを作成し、準備が完了したところ

レッドハット株式会社

サービス事業統括本部 ソリューション・アーキテクト部
シニアソリューションアーキテクト
データベース管理を始め、ビジネスプロセス管理、ビジネスルール管理、システム運用管理と、一貫してミドルウェアのプリセールスエンジニアとしてITに携わる。 2013年オープンソースミドルウェアに魅せられてレッドハットに入社。少林寺拳法をたまにやりながら、お腹が出ないよう格闘している。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています