我有 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。由于两个应用程序同时处于活动状态,这会在几秒钟内产生错误行为。
提到的是随机时间发生的,不可预测。我们的应用程序不能同时发布重复的消息,所以这会产生巨大的影响。
请帮助我解决这个问题。