まず最初に... シナリオについて質問があります。これはある種のテスト/演習ですか、それとも現実世界のシナリオについて話しているのですか?
すべてのクライアントは、映画の別のトピックのサブスクライバーに関心がありますか? それはどのようにスケーリングしますか?私は、すべての映画にトピックを用意し、関係者が恒久サブスクライバー (すべての映画に 1 人ずつ) を宣言することを計画していますか? これは永続的なサブスクライバーの悪用のようです...「映画公開」イベント/トピック (システム A から) に対して 1 つのサブスクライバー (システム B) のみを使用し、(システム B で) いくつかのコードを使用して、すべてのメール/メッセージなどを送信するためのDBからのクライアント。(システム A と B が同じである場合、EMS を使用することはまったく良い考えではないかもしれません...依存します。)
演習ではない場合は、コメントする必要があります: DBMS (Oracle、PostGreSQL) の作業を行うために MOM (EMS、ActiveMQ) を使用しないでください。
免責事項のセクションが完了したら、非同期サブスクリプション アプローチを提案します (これら 2 つのクリップは、EMS サンプル ディレクトリ用です。ファイルtibjmsAsyncMsgConsumer.java )。
コンストラクターから抽出します (メイン クラスは ExceptionListener、MessageListener を実装する必要があります)。
ConnectionFactory factory = new com.tibco.tibjms.TibjmsConnectionFactory(serverUrl);
/* create the connection */
connection = factory.createConnection(userName,password);
/* create the session */
session = connection.createSession();
/* set the exception listener */
connection.setExceptionListener(this);
/* create the destination */
if (useTopic)
destination = session.createTopic(name);
else
destination = session.createQueue(name);
System.err.println("Subscribing to destination: "+name);
/* create the consumer */
msgConsumer = session.createConsumer(destination);
/* set the message listener */
msgConsumer.setMessageListener(this);
/* start the connection */
connection.start();
このメソッドは、メッセージが到着するたびに呼び出されます。
public void onMessage(Message msg)
{
try
{
System.err.println("Received message: " + msg);
}
catch (Exception e)
{
System.err.println("Unexpected exception in the message callback!");
e.printStackTrace();
System.exit(-1);
}
}