1

我有 2 个 Java 应用程序实例(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”延迟发送心跳,我的被动应用程序“B”立即被激活,而“A”仍然处于活动状态,其中“A”上没有调用 deactivate . 在应用程序“A”发送心跳后不久,在应用程序“B”上调用 deactivate。由于两个应用程序同时处于活动状态,这会在几秒钟内产生错误行为。

提到的是随机时间发生的,不可预测。我们的应用程序不能同时发布重复的消息,所以这会产生巨大的影响。

请帮助我解决这个问题。

4

0 回答 0