【问题标题】:message flow - end when broker is stopping消息流 - 在代理停止时结束
【发布时间】:2020-09-22 15:53:09
【问题描述】:

我有一个每天晚上运行几个小时的 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();
    }

那么,我认为集成 API 在这里没有帮助吗?还是我缺少一些“.isTryingToStop”方法?

【问题讨论】:

  • simonalexander2005 - 建议使用外部调度程序,例如 control-m 来触发 IIB 中的消息流。 Control-m 可以调用一个脚本来启动您的流程,然后调用另一个脚本来停止您的流程。您可以在流程中设置一个计时器节点,以每分钟触发一次,以实现您每分钟执行一次的操作。尽量不要在消息流中保留消息流的调度逻辑,避免出现你提到的场景。

标签: ibm-integration-bus


【解决方案1】:

我建议查看Integration API。

在您的 Java 计算节点中,您可以连接到 BrokerProxy.getLocalInstance()(不要忘记连接到 disconnect(),否则您最终会耗尽内存)。然后我会尝试 MessageFlowProxy.isRunning() 作为您循环的退出标准。

如果 isRunning 不起作用,还有其他选项(例如 AdministeredObjectListener)来确定您的流程发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多