| Jグループ | |
|---|---|
| 開発者 | ベラ・バン |
| 安定リリース | |
| リポジトリ | github |
| 書かれた | ジャワ |
| オペレーティング·システム | クロスプラットフォーム |
| サイズ | 2.1MB |
| タイプ | 信頼性の高いマルチキャストシステム |
| ライセンス | Apacheライセンス2.0 |
| Webサイト | www.jgroups.org |
JGroupsは、 Java言語で記述された信頼性の高い 1 対 1 または 1 対多の通信用のライブラリです。
JGroupsは、メンバーが互いにメッセージを送信するプロセスグループを作成するために使用できます。JGroupsを使用すると、信頼性がデプロイメント上の課題となる場合でも、開発者は信頼性の高いマルチポイント(マルチキャスト)アプリケーションを作成できます。また、JGroupsは、アプリケーション開発者が自らこのロジックを実装する手間を軽減します。これにより、開発時間が大幅に短縮され、コードを変更することなくアプリケーションをさまざまな環境にデプロイできるようになります。
特徴
- グループの作成と削除。グループメンバーはLANまたはWANにまたがって配置できます。
- グループへの参加と脱退
- 参加/脱退/クラッシュしたメンバーに関するメンバーシップ検出と通知
- 衝突したメンバーの検出と除去
- メンバーからグループへのメッセージの送受信(ポイントツーマルチポイント)
- メンバー間メッセージの送受信(ポイントツーポイント)
コードサンプル
以下のコードは、JGroups を使用した シンプルなコマンドラインIRCクライアントの実装を示しています。
パブリッククラスChat はReceiverAdapterを拡張します{プライベートJChannelチャネル;public Chat ( String props , String name ) { channel = new JChannel ( props ) . setName ( name ) . setReceiver ( this ) . connect ( "ChatCluster" ); }public void viewAccepted ( View view ) { System . out . printf ( "** view: %s\n" , view ); }public void receive ( Message msg ) { System.out.printf ( " from %s: %s\ n " 、msg.getSource ( ) 、msg.getObject ( ) ) ; }private void send ( String line ) { try { channel .send ( new Message ( null , line )); } catch ( Exception e ) { } }public void run ()は例外をスローします{ BufferedReader in = new BufferedReader ( new InputStreamReader ( System . in ));while ( true ) { System.out.print ( " > " ) ; System.out.flush ( ) ; send ( in.readLine ( ) . toLowerCase ( ) ) ; } }public void end ()は例外をスローします{ channel.close ( ); }public static void start (チャットクライアント) throws Exception { try { client.run ( ) ; } catch ( Exception e ) { } finally { client.end ( ) ; } }public static void main ( String [] args ) throws Exception { String props = "udp.xml" ; String name ;for ( int i = 0 ; i < args . length ; i ++ ) { if ( args [ i ] . equals ( "-props" )) { props = args [++ i ] ;続行; }if ( args [ i ] . equals ( "-name" )) { name = args [++ i ] ;続行; }システム.out.println ( "チャット[-props XML設定] [ -name名前]" ) ; return ; }開始(新しいチャット(プロパティ、名前)); } }JChannelはXML設定(例:udp.xml)からインスタンス化されます。このチャネルはクラスターに参加するためのエンドポイントです。
次に、レシーバーが設定され、2 つのコールバックが呼び出されることになります。
viewAccepted(Viewview)新しいメンバーが参加するか、既存のメンバーがクラスターから離脱するときreceive(Messagemsg)他のクラスタメンバーからのメッセージを受信したとき
その後、チャンネルはクラスター「ChatCluster」に参加します。これ以降、メッセージの送受信が可能になり、新しいビュー(このメンバーを含む)がクラスターの全メンバー(新しく参加したメンバーを含む)にインストールされます。
メイン ループに入力されたものはすべて、送信者を含むすべてのクラスター メンバーに送信されるメッセージの作成につながります。
チャットアプリケーションのインスタンスは、同じプロセス、同じマシン、ローカルネットワーク内の異なるホスト、異なるネットワーク内のホスト、またはクラウド上で実行できます。コードは同じままで、設定のみを変更する必要があります。
例えば、ローカルネットワークではIPマルチキャストが使用される場合があります。IPマルチキャストが無効になっている場合は、TCPをトランスポートとして使用できます。クラウドで実行する場合は、TCPとクラウド検出プロトコルが使用されるなどです。
柔軟なプロトコルスタック
JGroupsの最も強力な機能は、柔軟なプロトコルスタックです。これにより、開発者はアプリケーション要件とネットワーク特性に合わせてJGroupsをカスタマイズできます。この利点は、使用した分だけ料金が発生することです。プロトコルを組み合わせることで、様々なアプリケーション要件を満たすことができます。JGroupsには多数のプロトコルが付属していますが(ただし、誰でも独自のプロトコルを作成することができます)、例えば、
- トランスポートプロトコル: UDP ( IP マルチキャスト)、TCP
- 大きなメッセージの断片化
- 参加ノードの初期メンバーシップを発見するための発見プロトコル
- 信頼性の高いユニキャストおよびマルチキャストメッセージ伝送。失われたメッセージは再送信されます。
- 障害検出: クラッシュしたメンバーはメンバーシップから除外されます
- 順序付けプロトコル: FIFO、全順序(シーケンサーまたはトークンベース)
- 参加またはクラッシュしたメンバーのメンバーシップと通知
- ネットワーク分割(スプリットブレイン)の検出とマージ
- フロー制御
- 暗号化と認証(SASLサポートを含む)
- 圧縮
ビルディングブロック
ビルディングブロックはJGroupsチャネルの上に階層化されたクラスであり、次のような高レベルの抽象化を提供します。
- 個々のまたはすべてのクラスタノードへのRPC
- 分散キャッシュ
- 分散ロック
- 分散型原子カウンター
- 分散タスク実行
参考文献
- ^ a b "Releases · belaban/JGroups" . github.com . 2024年7月31日閲覧。