JBOSS5.1 HA-JMSクラスタのJMSサービス
クラスタのJMSサービスJBoss AS 3.2.4以降のバージョンは、高可用性のallサーバ構成内のJMS(HA-JMS)サービスをサポートします.JBoss ASの現在のリリースでは、HA-JMSサービスはクラスタのsingleton fail-overサービスで実現されています.HA-JMSを自分で構成したい場合は、以前のJBoss ASバージョンで実行することができます.JBoss AS 3.0.7でHA-JMSを使用することに成功したお客様がいます.もっと質問があれば、JBossサポートに連絡してください.高可用性のSingleton Fail-over JBoss HA-JMSサービス(つまりメッセージキューとトピック)は、クラスタ内の単一ノード(プライマリノード)のみで所定の時間だけ実行されます.このノードがクラッシュした場合、クラスタシステムは簡単に別のノードを選択してJMSサービス(fail-over)を実行します.この設定は、サーバのダウンタイムに対するじょうちょうの対策を提供するが、JMSサーバノードの負荷を低減することはできない.注意HA-JMSキューに対してふかへいこう(このキューを実行するプライマリノードは1つしかない)を行うことはできませんが、キュー内の情報を処理するMDBsの負荷をバランスさせることができます(章6.1.3、「ふかへいこうのHA-JMS MDBs」参照).サーバ側構成singleton fail-over HA-JMSサービスを使用するには、クラスタ内のすべてのノードで同じJMSサービスを構成する必要があります.これには、JMSに関連するすべてのMBeansおよび導入されたJMSアプリケーションが含まれます.JMSサーバは、DefaultDS内の永続化のデータに設定されている.デフォルトでは、含まれるHSQLDBです.しかし、ほとんどのクラスタ環境では、すべてのノードがデータ持続性を共有データベースに接続する必要があります.したがって、クラスタJMSを起動する前に最初に行うことは、共有データベースを構築することです.•選択したデータベース・サーバを指すためにDefaultDSを構成する必要があります.docs/examples/jcaディレクトリの下のxxx-dsです.xmlファイルはdeploy/hsqlsb-dsに代わる.xmlファイル.xxxはターゲット共有データベースの名前(mysql-ds.xmlなど)です.•server/all/deploy-hasingleton/jmsディレクトリのhsqldb-jdbc 2-service.xmlファイルは特定のデータベースのファイルで置き換えられます.例えば、MySQLのファイルはmysql-jdbc 2-serviceです.xml.JBoss ASリリースでは、RDBMSのプロファイルがいくつかバンドルされています.docs/examples/jmsで見つけることができます.server/all/deploy-hasingleton/jmsディレクトリのhsqldb-jdbc-state-serviceを置き換える必要はありません.xmlファイル.名前にはhsqlが含まれていますが、HSQL、MySQL、SQLサーバ、およびその他のデータベースを含むすべてのSQL 92対応データベースに適用されます.私たちが上記のように、DefaultDSを自動的に使用してデータを保存します.
HA-JMSクライアントクライアントクライアントと従来のJMSクライアントは2つの点で異なる.•The HA-JMSのお客様は、HA-JNDIのJMS connection factories(デフォルトポートは1100)を取得する必要があります.•お客様の接続は、サーバ異常(exceptions)を監視する必要があります.クラスタシステムfail-overが別のプライマリノードに接続されると、現在の接続上のすべてのクライアント操作が失敗し、例外が発生します.クライアントは再接続を知っている必要があります.注意HA-JMS接続ファクトリ(connection factory)は、JMSサービスを実行する現在のプライマリノードを知っていますが、インテリジェントなクライアントインターセプタ(client side interceptor)は存在しません.クライアントstubは、サーバトポロジーの変化に応じて調整できない固定されたプライマリノードのみを知っている.
ロード・バランシングされたHA-JMS MDBsは、HA-JMSキュー(queues)とトピック(topics)が同じ時間に単一ノード上でのみ実行されるが、他のノード上のMDBsもHA-JMSマスターノード上の情報を受信および処理することができる.この競合はMDBsの平衡負荷挙動をもたらす.MDBsのバランシング負荷を有効にするには、キューのreceiverを指定します.このreceiverは、どのノードが情報と情報をどのような順序で処理するかを記録する.JBossは3つのreceiverの実装(implementations)を提供します.•The org.jboss.mq.server.ReceiversImplは、HashSetのデフォルトインプリメンテーションです.•The org.jboss.mq.server.ReceiversImplArrayListはArrayListの実装です.•The org.jboss.mq.server.ReceiversImplLinkedListはLinkedListの実装である.receiverインプリメンテーションのクラス名は、各ノードで永続的なJMS QueueまたはDestinationManagerを定義するMBeanのプロパティとして指定できます.最適な負荷バランシング性能を得るためには、JVMのHashSetの実装があまりよくないため、ReceiverImplArrayListまたはReceiverImplArrayListを使用して実装することをお勧めします.
JBOSS 5.1の構成
JMSのConnectionFactoryとQueue,Topicをそれぞれ2台の機器に配置する.
ディレクトリの場所:%JBOSS_HOME%/server/%INSTANCE%/deploy/構成メッセージの永続化に必要なデータベース:hsqldb-ds.xmlディレクトリの場所:%JBOSS_HOME%/server/%INSTANCE%/deploy/messaging
そのうち:connection-factories-service.xmlは、JMSのConnectionFactoryを構成するサービスのプロファイルです.ここでConnectionFactoryは通常のConnectionFactoryであり、自動failoverメカニズムと負荷等化はサポートされず、一般的なアプリケーションプロジェクトでConnectionFactoryに使用される.ClusteredConnectionFactoryがJBOSSに提供するクラスタConnectionFactoryは自動failoverメカニズムと負荷等化の作成をサポートします.ただし、メッセージドライバbeanではサポートされていません(MDB)が、failoverと負荷分散メカニズムを起動するには、true true ClusterPullConnectionFactoryがJBOSSに提供する非ConnectionFactoryのJNDIバインドを設定する必要があります.クラスタ内のConnectionFactoryメッセージの作成にのみ使用します.1つのノードから他のノードに転送します.MyExampleConnectionFactoryは、JBOSSが提供するConnectionFactoryの作成にすべてのプロパティのインスタンスを使用し、ユーザーが参照できるようにします.
hsqldb-persistence-service.xmlは、通常の構成JMSのメッセージ永続化プロファイルです.ここでこのようにデータベース(db 2,hsqldb,mysql,oracle,postgresqlなど)に永続化するには、%JBOSS_を参照してください.HOME%docsexamplesjms関連プロファイル
clustered-hsqldb-persistence-service.xmlは、JMSクラスタを構成する場合のメッセージ永続化プロファイル(本人が直接使用している%JBOSS_HOME%docsexamplesjms以下のcopy)ですが、hsqldbをメッセージ永続化データベースとして使用することは公式には推奨されていません.トランザクションサポートがあまりよくない可能性があります.
destinations-service.xmlは、JMSのQueue/Topicを構成するサービスのプロファイルです.ここで、DLQ、ExpiryQueue messaging-serviceのような2つのデフォルトのキューを構成します.xmlはJBOSSメッセージサービスのディスクリプタファイルを配置し、デフォルトのメッセージキューメッセージを構成する必要があります.
クライアント構成:JBOSS 5.1 HA-JMSの使用中に要求されるサーバパスの構成は以下の通りである:Properties prop=new Properties(); prop.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); prop.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces"); prop.setProperty("java.naming.provider.url", "192.168.70.104:1099,192.168.45.146:1099");
HA-JMSクライアントコードは以下の通りである.
HA-JMSクライアントクライアントクライアントと従来のJMSクライアントは2つの点で異なる.•The HA-JMSのお客様は、HA-JNDIのJMS connection factories(デフォルトポートは1100)を取得する必要があります.•お客様の接続は、サーバ異常(exceptions)を監視する必要があります.クラスタシステムfail-overが別のプライマリノードに接続されると、現在の接続上のすべてのクライアント操作が失敗し、例外が発生します.クライアントは再接続を知っている必要があります.注意HA-JMS接続ファクトリ(connection factory)は、JMSサービスを実行する現在のプライマリノードを知っていますが、インテリジェントなクライアントインターセプタ(client side interceptor)は存在しません.クライアントstubは、サーバトポロジーの変化に応じて調整できない固定されたプライマリノードのみを知っている.
ロード・バランシングされたHA-JMS MDBsは、HA-JMSキュー(queues)とトピック(topics)が同じ時間に単一ノード上でのみ実行されるが、他のノード上のMDBsもHA-JMSマスターノード上の情報を受信および処理することができる.この競合はMDBsの平衡負荷挙動をもたらす.MDBsのバランシング負荷を有効にするには、キューのreceiverを指定します.このreceiverは、どのノードが情報と情報をどのような順序で処理するかを記録する.JBossは3つのreceiverの実装(implementations)を提供します.•The org.jboss.mq.server.ReceiversImplは、HashSetのデフォルトインプリメンテーションです.•The org.jboss.mq.server.ReceiversImplArrayListはArrayListの実装です.•The org.jboss.mq.server.ReceiversImplLinkedListはLinkedListの実装である.receiverインプリメンテーションのクラス名は、各ノードで永続的なJMS QueueまたはDestinationManagerを定義するMBeanのプロパティとして指定できます.最適な負荷バランシング性能を得るためには、JVMのHashSetの実装があまりよくないため、ReceiverImplArrayListまたはReceiverImplArrayListを使用して実装することをお勧めします.
JBOSS 5.1の構成
JMSのConnectionFactoryとQueue,Topicをそれぞれ2台の機器に配置する.
ディレクトリの場所:%JBOSS_HOME%/server/%INSTANCE%/deploy/構成メッセージの永続化に必要なデータベース:hsqldb-ds.xmlディレクトリの場所:%JBOSS_HOME%/server/%INSTANCE%/deploy/messaging
そのうち:connection-factories-service.xmlは、JMSのConnectionFactoryを構成するサービスのプロファイルです.ここでConnectionFactoryは通常のConnectionFactoryであり、自動failoverメカニズムと負荷等化はサポートされず、一般的なアプリケーションプロジェクトでConnectionFactoryに使用される.ClusteredConnectionFactoryがJBOSSに提供するクラスタConnectionFactoryは自動failoverメカニズムと負荷等化の作成をサポートします.ただし、メッセージドライバbeanではサポートされていません(MDB)が、failoverと負荷分散メカニズムを起動するには、
hsqldb-persistence-service.xmlは、通常の構成JMSのメッセージ永続化プロファイルです.ここでこのようにデータベース(db 2,hsqldb,mysql,oracle,postgresqlなど)に永続化するには、%JBOSS_を参照してください.HOME%docsexamplesjms関連プロファイル
clustered-hsqldb-persistence-service.xmlは、JMSクラスタを構成する場合のメッセージ永続化プロファイル(本人が直接使用している%JBOSS_HOME%docsexamplesjms以下のcopy)ですが、hsqldbをメッセージ永続化データベースとして使用することは公式には推奨されていません.トランザクションサポートがあまりよくない可能性があります.
destinations-service.xmlは、JMSのQueue/Topicを構成するサービスのプロファイルです.ここで、DLQ、ExpiryQueue messaging-serviceのような2つのデフォルトのキューを構成します.xmlはJBOSSメッセージサービスのディスクリプタファイルを配置し、デフォルトのメッセージキューメッセージを構成する必要があります.
クライアント構成:JBOSS 5.1 HA-JMSの使用中に要求されるサーバパスの構成は以下の通りである:Properties prop=new Properties(); prop.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); prop.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces"); prop.setProperty("java.naming.provider.url", "192.168.70.104:1099,192.168.45.146:1099");
HA-JMSクライアントコードは以下の通りである.
import java.util.Properties;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.TextMessage;
import javax.naming.Context;
/**
<p>
</p>
*
* <p> , 。<p>
*
* 2013-5-28<br>
* @author longgangbai<br>
* @version $Revision$ $Date$
* @since 3.0.0
*/
public class CLusterClient {
/**
* @param args
*/
public static void main(String[] args) {
try {
// JNDI
Context context = getInitialContext();
//
QueueConnectionFactory obj = (QueueConnectionFactory) context.lookup("ClusteredConnectionFactory");
//
QueueConnection conn = obj.createQueueConnection();
//
QueueSession session = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
//
Queue queue = (Queue) context.lookup("queue/DLQ");
//
String text = "hello world";
// message
QueueSender sender = session.createSender(queue);
for (int i = 0; i < 100; i++) {
TextMessage tm = session.createTextMessage(text);
System.out.println("send text:" + text);
sender.send(tm);
}
//
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("-------------OK");
}
public static Context getInitialContext() throws Exception {
try {
Properties prop = new Properties();
prop.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
prop.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
prop.setProperty("java.naming.provider.url", "192.168.70.104:1100,192.168.45.146:1100");
return new javax.naming.InitialContext(prop);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
}