поток сообщений — завершается при остановке брокера

#ibm-integration-bus

#ibm-integration-bus

Вопрос:

У меня есть поток сообщений IIB, который выполняется в течение нескольких часов каждый вечер, используя цикл Java для выполнения некоторых действий один раз в минуту.

В течение этого времени, если брокер с несколькими экземплярами, на котором выполняется поток, завершается сбоем, переход на другой ресурс зависает до тех пор, пока этот поток сообщений не завершит свою обработку (возможно, через несколько часов).

Есть ли какой-либо хук, который я могу использовать в Java, чтобы сказать «если брокер останавливается или завершается сбоем, затем отмените эту обработку, чтобы это произошло»?


Редактировать

Теперь я попробовал следующий код в качестве теста, но даже когда делается запрос на остановку группы / потока выполнения, все логические значения остаются как true

     Boolean egIsRunning = true;
    Boolean aIsRunning = true;
    Boolean msgFlowIsRunning = true;
    while (egIsRunning amp;amp; aIsRunning amp;amp; 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», который мне не хватает?

Комментарии:

1. simonalexander2005 — Было бы предложено использовать внешний планировщик, такой как control-m, для запуска вашего потока сообщений в IIB. Control-m может вызвать скрипт, который запускает ваш поток, а затем другой скрипт, который останавливает ваш поток. Вы можете иметь узел таймера в потоке, который запускает каждую минуту, чтобы выполнить все, что вы делаете, один раз в минуту. Старайтесь не сохранять логику планирования потока сообщений в потоке сообщений, чтобы избежать упомянутого вами сценария.

Ответ №1:

Я рекомендую взглянуть на API интеграции.

Из вашего вычислительного узла Java вы можете подключиться с помощью BrokerProxy.getLocalInstance() (не забудьте disconnect() , иначе у вас в конечном итоге закончится память). Тогда я бы попробовал MessageFlowProxy.isRunning() в качестве критерия выхода для вашего цикла.

isRunning Не должно работать, есть другие варианты, такие как AdministeredObjectListener, чтобы выяснить, что происходит с вашим потоком.