JavaアプリケーションとJGroupsの相互作用

今日はJGroupsについて話したいと思います。 これは、さまざまなJavaプロセス間のグループインタラクションを整理するためのJavaライブラリです。 JGroupsを使用するアプリケーションは次のことができます。このライブラリは、特にJBossアプリケーションサーバー、OSCacheキャッシュ、およびInfinispan Gridプラットフォームで広く使用されています。

ここでは、初期情報に限定し、Javaでの簡単なグループチャットの作成について説明します。

はじめに


そのため、最初にJGroupsをダウンロードする必要があります。 これはhttp://sourceforge.net/projects/javagroups/files/で実行できます。 この記事を書くとき、バージョン2.6.13.GAを使用しました。 また、Apache Commons Logging、またはそれを置き換えるもの(jcl-over-slf4jなど)が作業に必要です。 http://commons.apache.org/downloads/download_logging.cgiからダウンロードできます。

Mavenを使用する場合、JBossリポジトリを追加できます。

Copy Source | Copy HTML < repository > < id > jboss </ id > < name > jboss </ name > < url > http://repository.jboss.com/maven2 </ url > < snapshots > < enabled > false </ enabled > </ snapshots > </ repository >
  1. Copy Source | Copy HTML < repository > < id > jboss </ id > < name > jboss </ name > < url > http://repository.jboss.com/maven2 </ url > < snapshots > < enabled > false </ enabled > </ snapshots > </ repository >
  2. Copy Source | Copy HTML < repository > < id > jboss </ id > < name > jboss </ name > < url > http://repository.jboss.com/maven2 </ url > < snapshots > < enabled > false </ enabled > </ snapshots > </ repository >
  3. Copy Source | Copy HTML < repository > < id > jboss </ id > < name > jboss </ name > < url > http://repository.jboss.com/maven2 </ url > < snapshots > < enabled > false </ enabled > </ snapshots > </ repository >
  4. Copy Source | Copy HTML < repository > < id > jboss </ id > < name > jboss </ name > < url > http://repository.jboss.com/maven2 </ url > < snapshots > < enabled > false </ enabled > </ snapshots > </ repository >
  5. Copy Source | Copy HTML < repository > < id > jboss </ id > < name > jboss </ name > < url > http://repository.jboss.com/maven2 </ url > < snapshots > < enabled > false </ enabled > </ snapshots > </ repository >
  6. Copy Source | Copy HTML < repository > < id > jboss </ id > < name > jboss </ name > < url > http://repository.jboss.com/maven2 </ url > < snapshots > < enabled > false </ enabled > </ snapshots > </ repository >
  7. Copy Source | Copy HTML < repository > < id > jboss </ id > < name > jboss </ name > < url > http://repository.jboss.com/maven2 </ url > < snapshots > < enabled > false </ enabled > </ snapshots > </ repository >
  8. Copy Source | Copy HTML < repository > < id > jboss </ id > < name > jboss </ name > < url > http://repository.jboss.com/maven2 </ url > < snapshots > < enabled > false </ enabled > </ snapshots > </ repository >
依存する追加:

Copy Source | Copy HTML
  1. < 依存関係 >
  2. < groupId > jgroups </ groupId >
  3. < artifactId > jgroups </ artifactId >
  4. < バージョン > 2.6.13.GA </ バージョン >
  5. </ 依存関係 >
  6. < 依存関係 >
  7. < groupId > commons-logging </ groupId >
  8. < artifactId > commons-logging </ artifactId >
  9. < バージョン > 1.1.1 </ バージョン >
  10. </ 依存関係 >

マルチキャストを使用するには、ネットワークインターフェイスを構成する必要がある場合があります。 Linuxでは、このために適切なルートを追加する必要があります。

 route add -net 224.0.0.0 netmask 240.0.0.0 dev lo 


初期化


チャンネルを作成するには、 JChannelクラスのオブジェクトを作成し、コンストラクターで設定パラメーターを渡す必要があります。 構成の例では、チャネルに使用するアドレスを指定します。 オプションの完全なリストはドキュメントにあります

 JChannel channel = new JChannel( "UDP(bind_addr=127.0.0.1)" ); 

これで、JChannel#connect()を呼び出してクラスターに接続できます。 パラメーターとして、グループの名前が渡されます。好きなものを選択できます。

 channel.connect( "MyCluster" ); 

メッセージを送信する


JGroupsのメッセージは、送信者アドレス、受信者アドレス、およびデータを含むMessageクラスによって表されます。 アドレスはAddressクラスのオブジェクトによって表され、データは任意のシリアル化可能なオブジェクトまたは単なるバイトの配列です。 たとえば、グループ全体のメッセージを作成するには、次の行を記述します。

 new Message( null, null, "Some content" ) 

ここでは、最初のパラメーターは受信者、送信者、そしてコンテンツです。

メッセージを送信するには、 JChannel#sendメソッドを呼び出して、メッセージをパラメーターとして渡す必要があります。 例:

 channel.send( new Message( null, null, "Some content" ) ) 


メッセージ処理


ここで、アプリケーションに到着するメッセージを処理するコードを記述する必要があります。 これを行うには、JChannel#setReceiverメソッドを呼び出して、 Receiverインターフェイスを実装するオブジェクトを引数として渡します。 たとえば、受信したすべてのメッセージを印刷用に単純に印刷するには、次のコードを記述します。

Copy Source | Copy HTML
  1. channel.setReceiver( new ReceiverAdapter (){
  2. @Override
  3. public void receive( メッセージ m){
  4. システム out .println(m.getObject());
  5. }
  6. });
ここで、コードの量を減らすために、オブジェクトはReceiverAdapterクラスから継承され、Receiverインターフェイスのさまざまなメソッドの空の実装を提供します。 この例からわかるように、受信メソッドはメッセージを処理するために使用され、メッセージはパラメーターとして渡されます。

簡単なチャット


これで、簡単なチャットをまとめることができます。 彼はグループにコンソールから受信した行を送信し、受信した行をコンソールに出力します。 コード例:

Copy Source | Copy HTML
  1. java.ioをインポートします。 BufferedReader
  2. java.ioをインポートします。 InputStreamReader ;
  3. org.jgroupsをインポートします。 JChannel ;
  4. org.jgroupsをインポートします。 メッセージ
  5. org.jgroupsをインポートします。 ReceiverAdapter ;
  6. パブリッククラス SimplestChat {
  7. public static void main( String [] args)throws Exception {
  8. JChannel channel = new JChannel"UDP(bind_addr = 127.0.0.1)" );
  9. channel.setReceiver( new ReceiverAdapter (){
  10. @Override
  11. public void receive( メッセージ m){
  12. システム out .println(m.getObject());
  13. }
  14. });
  15. channel.connect( "MyCluster" ); //グループに接続します
  16. / ** <br/> *コンソールからのコマンド処理サイクル <br/> * /
  17. BufferedReader in = new BufferedReadernew InputStreamReaderSystem。In ));
  18. whiletrue ){
  19. 文字列 line = in .readLine();
  20. if (line.equalsIgnoreCase( "quit" )|| line.equalsIgnoreCase( "exit" )){
  21. 休憩 ;
  22. }
  23. channel.send( new Messagenullnull 、line));
  24. }
  25. channel.close(); //作業の完了時にグループから切断します
  26. }
  27. }
起動すると、このコードは次のようなものを出力するはずです。

   2009年11月8日午後4時18分27秒org.jgroups.JChannel init
  情報:JGroupsバージョン:2.6.13.GA

次は?


ここでは、チャネルの作成とグループへのメッセージの送信のみに注目しました。 かなり多くの点がありました:アドレス指定、特定のプロセスへのメッセージ、そして最も重要なことには、グループ管理。 それらに精通したい人は、JGroupsのドキュメントhttp://jgroups.org/ug.htmlをご覧ください

Source: https://habr.com/ru/post/J74660/


All Articles