0

私のシナリオは、私が映画配給業者として、新しい映画についてクライアントを更新する必要があるというものです。この情報を、永続的な購読者がいるトピックで公開し、映画を購入したいクライアントが関心を示します。

ただし、これは事態が悪化する場所です。パブリッシャーの私の実装は、最初の応答を受信するとすぐにリッスンを停止します。どんな助けでも大歓迎です。ありがとうございました。

request(Message message) リクエストを送信し、返信を待ちます。JMSReplyTo 宛先には一時トピックが使用されます。最初の応答が返され、それ以降の応答は破棄されます。

https://docs.oracle.com/javaee/6/api/javax/jms/TopicRequestor.html

4

2 に答える 2

1

まず最初に... シナリオについて質問があります。これはある種のテスト/演習ですか、それとも現実世界のシナリオについて話しているのですか?

すべてのクライアントは、映画の別のトピックのサブスクライバーに関心がありますか? それはどのようにスケーリングしますか?私は、すべての映画にトピックを用意し、関係者が恒久サブスクライバー (すべての映画に 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);
    }
}
于 2015-02-02T15:17:34.610 に答える