フロントエンドノードの設定

クラスターで利用する場合、コンフィグファイルだけでなくルーティングスクリプトも用意しなければなりません。

フロントエンドノードのコンフィグ設定

概要で説明したように、フロントエンドノードとは、ただの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ルーティングスクリプトのファイルパスです。ルーティングスクリプトについては下で説明します。
fetcherfetcherクラスとその設定パラメータを用意します。Inboxキューからメッセージを受け取るためのクラスです。現在はOcean::Cluster::Frontend::Fetcher::Gearmanしか用意されていません。
dispatcherdispatcherクラスとその設定パラメータを用意します。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でデフォルトのルーティング先を指定できます。あるイベントが発生したとき、そのイベントのルーティング先が登録されていなかった場合、デフォルトルートで指定された宛先にパケットが渡されます。

イベントには次の種類があります。

  • node_init
  • node_exit
  • node_timer_report
  • too_many_auth
  • sasl_auth
  • sasl_password
  • sasl_password
  • sasl_success_notification
  • http_auth
  • bind
  • message
  • presence
  • initial_presence
  • unavailable_presence
  • silent_disconnection
  • roster
  • vcard
  • iq_toward_user

デリバリーサービスの設定

設定ファイルはプロジェクトルートの中の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_serversBackground 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
設定項目 概要
nodeNodeイベントカテゴリ用ハンドラクラスを指定します。
authenAuthenイベントカテゴリ用ハンドラクラスを指定します。
connectionConnectionイベントカテゴリ用ハンドラクラスを指定します。
peoplePeopleイベントカテゴリ用ハンドラクラスを指定します。
messageMessageイベントカテゴリ用ハンドラクラスを指定します。
roomRoomイベントカテゴリ用ハンドラクラスを指定します。
p2pP2Pイベントカテゴリ用ハンドラクラスを指定します。
pubsubPubSubイベントカテゴリ用ハンドラクラスを指定します。
workerWorkerイベントカテゴリ用ハンドラクラスを指定します。

カスタムセクション

ハンドラ内から利用したい項目をここで独自に定義しておくとよいでしょう。

handler: