2012-04-27 11 views
1

スタンドアロンで動作するHornetQ(v2.2.13)コンシューマを使用して、JBOSSサーバ(7.1.1最終版)によって発行された永続的なトピックを読み込みます。すべては数時間(2〜6時間)うまくいってから、消費者はトピックからのメッセージの受信を止めるだけです。サーバー上のログファイルから、データはパイプを介してポンピングされ続けますが、コンシューマログファイルはクライアントがデータの読み込みを停止したことを示しています。私はクライアントから、トピックからメッセージを最後に読んだときに12:00:00とメッセージをトピックにプッシュした最後の時間を示すログが14:00:00であったと推測しました。HornetQ消費者がN時間後にメッセージを受信しない

私はHornetQ設定を調整しようとしましたが、持続可能な期間は動作していないようです。

トピックとの通信に使用するコードは次のとおりです。セッションを作成し、それを開始し

private TransportConfiguration getTC(String hostname) { 
     Map<String,Object> params = new HashMap<String, Object>(); 
     params.put(TransportConstants.HOST_PROP_NAME, hostname); 
     params.put(TransportConstants.PORT_PROP_NAME, 5445); 
     TransportConfiguration tc = new TransportConfiguration(NettyConnectorFactory.class.getName(), params); 
     return tc; 

    } 

    private Topic createDestination(String destinationName) { 
     Topic topic = new HornetQTopic(destinationName); 
     return topic; 

    } 

    private HornetQConnectionFactory createCF(TransportConfiguration tc) { 
     HornetQConnectionFactory cf = HornetQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType .CF, tc); 
     return cf == null ? null : cf; 

    } 

コードスニペット:

TransportConfiguration tc = this.getTC(this.hostname); 
     HornetQConnectionFactory cf = this.createCF(tc); 
     cf.setRetryInterval(4000); 
     cf.setReconnectAttempts(10); 
     cf.setConfirmationWindowSize(1000000); 

     Destination destination = this.createDestination(this.topicName); 
     logger.info("Starting Topic Connection"); 
     try { 
      this.connection = cf.createConnection(); 

      connection.start(); 
      this.session = connection.createSession(transactional, ackMode); 
      MessageConsumer consumer = session.createConsumer(destination); 
      consumer.setMessageListener(this); 

      logger.info("Started topic connection"); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
      logger.error("EXCEPTION!"); 
     } 

答えて

1

あなたは、サーバーは、サーバーの側で切断され得ることについてすべてのログを取得できません。

クライアントの障害チェック期間とその他のpingパラメータを試してみましたか?

VM設定はどうですか?

どのようにメッセージを確認していますか?私はあなたがトランザクションとしてそれを作成したことがわかります。あなたはメッセージを受信すると同時にTXをコミットしていますか?

+0

切断に関するサーバー側のログは表示されません。切断についてのメッセージが表示されるのは、クライアントとクライアントが再接続できないという前にサーバーを停止したときだけです。 TXに関して、私はそれを得るとすぐにそれぞれのメッセージを受け取ります。 – FloppyDisk

+0

それを複製したり、より多くの情報を持っている私は推測できる方法がありません。このようなシナリオをテストしたところ、問題は見つかりませんでした。私の推測では、ページングが設定されておらず、別のサブスクリプションによってシステムがブロックされているということです。デッドサブスクリプション(サブスクリプションを作成して忘れてしまったこと)やページングを構成していないことを確認する必要があります。なぜあなたはより多くの情報を提供することができるhornetqユーザーのフォーラムに議論を飛ばすのですか? –

+0

私はあとで今日または明日の朝にスレッドを開始します。ありがとう! – FloppyDisk

関連する問題