クラスターで利用する場合、コンフィグファイルだけでなくルーティングスクリプトも用意しなければなりません。
概要で説明したように、フロントエンドノードとは、ただのOcean XMPPサーバーで、クラスター用の動作が既に記述されたイベントハンドラを利用してるだけに過ぎません。ですので、基本的なコンフィグ設定は開発ガイド - コンフィギュレーションで説明したものと同じです。
クラスターのために意識しなければいけないのは、カスタムセクションのみです。
handler: node_id: node01 serializer: json router: __path_to(config/router.pl)__ fetcher: class: Ocean::Cluster::Frontend::Fetcher::Gearman config: inbox_host: 10.192.209.42 inbox_port: 7002 dispatcher: class: Ocean::Cluster::Frontend::Dispatcher::Gearman config:
設定項目 | 概要 |
---|---|
node_id | ノードのIDです。適当な文字列で名前を付けて下さい。複数のフロントエンドノードの中でユニークになるように気をつけて下さい。この名前は、デリバリーサービス側の設定で利用します。 |
serializer | シリアライザのタイプを選択します。デフォルトはjsonです。 |
router | ルーティングスクリプトのファイルパスです。ルーティングスクリプトについては下で説明します。 |
fetcher | fetcherクラスとその設定パラメータを用意します。Inboxキューからメッセージを受け取るためのクラスです。現在はOcean::Cluster::Frontend::Fetcher::Gearmanしか用意されていません。 |
dispatcher | dispatcherクラスとその設定パラメータを用意します。Background Dispatcherにメッセージを渡すためのクラスです。現在はOcean::Cluster::Frontend::Dispatcher::Gearmanしか用意されていません。 |
複数のブローカをBackground Dispatcherとして利用する場合、イベント毎のルーティングを設定する事が可能です。
上のカスタムセクションの設定におけるrouter項目で指定してあるファイルを開いて編集します。デフォルトではconfigディレクトリの下のrouter.plになっています。
vi ./config/router.pl
router { register_broker(mybroker00 => ["10.192.209.42:7001"]); # register_broker(mybroker01 => ["192.168.0.2:7001", "192.168.0.3:7001"]); default_route({ broker => 'mybroker00', queue => 'ocean_default', }); # event_route("message" => { # broker => 'mybroker01', # queue => 'ocean01', # }); # event_route(["message", "presence"] => { # broker => 'mybroker02', # queue => 'ocean02', # }); };
手順としてはregister_brokerで、まず必要なだけ、ブローカーの登録を行います。適当に名前をつけ、アドレスを指定します。
次にイベント毎に、event_routeで、ルーティング先のブローカーとキューの名前を登録していきます。
default_routeでデフォルトのルーティング先を指定できます。あるイベントが発生したとき、そのイベントのルーティング先が登録されていなかった場合、デフォルトルートで指定された宛先にパケットが渡されます。
イベントには次の種類があります。
設定ファイルはプロジェクトルートの中のconfigディレクトリの中にあります。
vi ./config/ocean-cluster.yml
worker: domain: xmpp.example.org max_workers: 1 node_inboxes: - node_id: node01 address: 10.192.209.42:7002 - node_id: node02 address: 10.192.209.42:7003 broker_servers: - 10.192.209.42:7001 context_class: MyService::Context queue_name: ocean_default
設定項目 | 概要 |
---|---|
domain | サービスドメインです。JIDのドメインパートに使われるものを指定しておきます。 |
max_workers | 起動するワーカーのプロセス数を指定します。 |
node_inboxes | フロンとエンドノードのためのInboxとなるブローカーのリストを指定します。それぞれノードIDとアドレスを指定しておきます。ノードIDについては、フロントエンドノードのカスタムセクションで指定したものが使われるように注意して下さい。 |
broker_servers | Background Dispatcherとなるブローカーのサーバーリストです。 |
context_class | プロジェクトテンプレートジェネレータ実行時に回答したコンテキストクラスの名前が自動的に指定されています。基本的には自分でこの項目を編集する必要はありません。 |
queue_name | キューの名前です。フロントエンドノードのルーティング設定で指定した名前と同じにして下さい。 |
開発ガイド - コンフィギュレーション [ ログセクション ]を参照して下さい。全く同じです。
イベントハンドラセクションの設定例です。プロジェクトテンプレートジェネレータ実行時に、回答した名前空間をベースにして自動生成されています。この設定項目は基本的には自分で編集する必要はありません。
イベントカテゴリやハンドラクラスについて詳しくは前章のイベントを参照してください。
event_handler: node: Hoge::Handler::Node authen: Hoge::Handler::Authen connection: Hoge::Handler::Connection message: Hoge::Handler::Message people: Hoge::Handler::People room: Hoge::Handler::Room p2p: Hoge::Handler::P2P
設定項目 | 概要 |
---|---|
node | Nodeイベントカテゴリ用ハンドラクラスを指定します。 |
authen | Authenイベントカテゴリ用ハンドラクラスを指定します。 |
connection | Connectionイベントカテゴリ用ハンドラクラスを指定します。 |
people | Peopleイベントカテゴリ用ハンドラクラスを指定します。 |
message | Messageイベントカテゴリ用ハンドラクラスを指定します。 |
room | Roomイベントカテゴリ用ハンドラクラスを指定します。 |
p2p | P2Pイベントカテゴリ用ハンドラクラスを指定します。 |
pubsub | PubSubイベントカテゴリ用ハンドラクラスを指定します。 |
worker | Workerイベントカテゴリ用ハンドラクラスを指定します。 |
ハンドラ内から利用したい項目をここで独自に定義しておくとよいでしょう。
handler: