我在同一台机器上运行了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”仍处于活动状态,其中不会调用deactivate “一个”。在应用程序“A”发送心跳后不久,在应用程序“B”上调用deactivate。由于两个应用程序同时处于活动状态,因此会在几秒钟内出现错误行为。
提到的是随机时间发生的,不可预测。我们的应用程序无法同时发布重复的消息,因此会产生巨大的影响。
请帮助我如何克服这个问题。