HORB Messaging Service 2001.3.2 (2001.6.18 更新) 秋山朋之 日本アドバンス・テクノロジー 平野 聡 電子技術総合研究所 萩本順三 福村真奈美 豆蔵
1.アーキテクチャ HORBのコアには手を加えない。 エクステンションのパッケージ horbx.msgq:無償公開 horby.msgq:有償化の予定 従来の開発スタイルを踏襲
2.メッセージングサービスとは 一つの事象を複数の相手へ確実に同報する。 リモート・オブジェクトの一時停止やダウンに対しキューがメッセージを保持する。 HORBでは3種類用意 Point to Points Publish & Subscribe Atomic Broadcast フォールトトレラントのレベルはリモートオブジェクトとメッセージングサーバの2レベル。
3.プログラミングインターフェース HORBの開発スタイルの踏襲 リモートオブジェクトのメソッド宣言の決まり msgqcコンパイラを提供 返り値はvoid型 メソッド名の最後は‘_MsgQ’ msgqcコンパイラを提供 MsgQServerクラスでリモートオブジェクトをメッセージングサーバへ登録
3.1 受信側のコード例 Receiver void main(String[] argv){ // 1.登録用の専用Proxyを初期化 3.1 受信側のコード例 Receiver void main(String[] argv){ // 1.登録用の専用Proxyを初期化 proxy = new horbx.magq.MsgQServer(url); // 2.自分自身の初期化 Receiver receiver = new Receiver(); // 3.メッセージングサーバへ登録 proxy.registerReceiver(queueName, receiver); } void main(); void test_Msgq(int); void test_Msgq(int value){ : }
3.2 msgqcコンパイラとは 新たに用意したメッセージングサービス専用コンパイラ 受信者側の‘A’クラスから送信者で利用する‘A’_MsgQProxyクラスを作成する。 但し、メッセージングの内部フレームワークはhorbcを使用している。 > つまり、メッセージングサービスは100%HORB >msgqc Receiver.java compiling Receiver.java generating Receiver_MsgQ.java compiling Receiver_MsgQ.java >
3.3 送信側のコード例 Sender void main(); void main(String[] argv){ 3.3 送信側のコード例 Sender void main(String[] argv){ // 1.MsgQProxyの初期化 Receiver_MsgQProxy proxy = new Receiver_MsgQProxy(url,queueName); // 2.メソッド呼び出し > メッセージ送信 proxy.test_MsgQ(100); : } Receiver_MsgQProxy void main(); (msgqcで作成)
3.4 他のメッセージングとの比較 JMS / CORBA Event・Notification Serviceは多機能な分知らなければならないクラス・インターフェースが膨大。 HORBメッセージングサービスで既存のHORBユーザが新たに覚える事は最小限 返値はvoid型、メソッド名の最後は‘_MsgQ’ msgqcコンパイラの使用 サーバの登録クラス horbx.msgq.MsgQServer
4.デモンストレーション キューの様子を立体的にモニター
5.ベンチマーク スループット:現状の参考値(チューニング中) ペンティアムⅢ1GHz 二台をネットワーク接続 HORBメッセージングサーバと、もう一台を送信クライアント/受信クライアントとした。 J2SE ver1.3 Windows2000 1000連続メッセージのスループット 結果 永続記憶なし:50msec/message 永続記憶あり:125msec/message 永続記憶のコストは75msec程度 X軸:byte/int/doubleを配列のサイズを10の6乗まで増す。 Y軸:1メッセージ当たりのスループット時間(msec)
アプリケーション応用例 3億家庭(?)の ビデオサーバ ブロードバンド・インターネットビデオ配信サービス 放送局 MessageQueueServer カクケード接続 3億家庭(?)の ビデオサーバ