Jグループ

Jグループ
開発者ベラ・バン
安定リリース
5.x5.3.9.最終 / 2024年7月12日[ 1 ] ( 2024-07-12 )
4.x4.2.28.最終 / 2024年4月10日[ 1 ] ( 2024-04-10 )
リポジトリgithub .com /ベラバン/JGroups
書かれたジャワ
オペレーティング·システムクロスプラットフォーム
サイズ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
  • 分散キャッシュ
  • 分散ロック
  • 分散型原子カウンター
  • 分散タスク実行

参考文献

  1. ^ a b "Releases · belaban/JGroups" . github.com . 2024年7月31日閲覧