问题描述
我有一个IIB消息流,该消息流每天晚上运行几个小时,使用java循环每分钟执行一次一些操作。
在此期间,如果正在运行该流的多实例代理进行故障转移,则故障转移将挂起,直到该消息流结束其处理(可能在几小时后)。
我可以在Java中使用任何类型的钩子来表示“如果代理正在停止或进行故障转移,请取消此处理以使其发生”?
编辑
我现在已经尝试使用以下代码作为测试,但是即使发出了停止执行组/流的请求,布尔值也都保持为真
Boolean egIsRunning = true;
Boolean aIsRunning = true;
Boolean msgFlowIsRunning = true;
while (egIsRunning && aIsRunning && msgFlowIsRunning)
{
Thread.sleep(1000);
ExecutionGroupProxy e = ExecutionGroupProxy.getLocalInstance();
egIsRunning = e.isRunning();
ApplicationProxy a = e.getApplicationByName("SANDBox.APP");
aIsRunning = a.isRunning();
MessageFlowProxy m = a.getMessageFlowByName("SANDBox_MSGFLOW");
msgFlowIsRunning = m.isRunning();
}
因此,我认为Integration API在这里没有帮助吗?还是我缺少一些“ .isTryingToStop”方法?
解决方法
我建议看一下Integration API。
在Java Compute节点内,您可以连接BrokerProxy.getLocalInstance()(不要忘记连接disconnect()
,否则最终会耗尽内存)。然后,我尝试使用MessageFlowProxy.isRunning()作为循环的退出条件。
如果isRunning
不起作用,还有AdministeredObjectListener之类的其他选项可以确定流量发生了什么。