1

Java アプリケーションの 2 つのインスタンス (A & B) が同じマシンで実行されており、B はactivate()コールバックに対してブロックされています。

コールバックを登録する方法は次のとおりです。

new TibrvFtMember(this.tibrvQueue,
   this.orv,
   this.transport,
   MessagingProps.TIBCO_GROUP_FT, // Group name
   wt,            // Weight
   1,             // Active members
   2.0,             // Heartbeat (secs.)
   0.0,           // Prep. (secs.)
   2.5,             // Activation (secs.)
   null);

アプリケーションが時間どおりであることを確認するために、100 ミリ秒ごとにハートビートを送信しています。

msg.add("Data", ++seq + ":" + MessagingProps.TIBCO_SUBJECT_FT);
                msg.setSendSubject(MessagingProps.TIBCO_SUBJECT_FT);
                transport.send(msg)

なんらかの理由 (GC / ガベージ コレクションなど) で、アクティブなアプリケーション "A" がハートビートの送信に遅れた場合、"A" がまだアクティブな間にパッシブ アプリケーション "B" がすぐにアクティブ化され、"A" で非アクティブ化が呼び出されません。 . そして、アプリケーション「A」がハートビートを送信した直後に、アプリケーション「B」で非アクティブ化が呼び出されます。これにより、両方のアプリケーションが同時にアクティブになるため、数秒間誤った動作が発生します。

上記はランダムな時間に発生し、予測できません。私たちのアプリケーションは重複したメッセージを同時に発行することはできないため、これは大きな影響をもたらします。

どうすればこの問題を克服できるか教えてください。

4

0 に答える 0