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」で非アクティブ化が呼び出されます。これにより、両方のアプリケーションが同時にアクティブになるため、数秒間誤った動作が発生します。
上記はランダムな時間に発生し、予測できません。私たちのアプリケーションは重複したメッセージを同時に発行することはできないため、これは大きな影響をもたらします。
どうすればこの問題を克服できるか教えてください。