Мул останавливает и запускает поток вручную, удерживая устаревшего потребителя, и сообщения застревают

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

Есть идеи, как решить эту проблему? Есть ли более эффективные способы прекратить потребление сообщений на определенное время - без остановки всего приложения?

    for (FlowConstruct flowConstruct : flowConstructs) {
        Flow flow = (Flow) flowConstruct;
        if (flowsToStop.contains(flow.getName())) {
            if(!flow.isStopped()) {
                flow.stop();
            } else {
                logger.warn("Flow " + flow.getName() + " was already stopped!");
            }

        }
    }

1 ответ

На прошлой неделе я написал пост в блоге, основы того, как запускать и останавливать потоки с помощью Groovy. http://www.corralict.nl/how-to-start-stop-mule-flows-from-a-client-over-http/

Не знаю, поможет ли это с вашим конкретным вариантом использования.

Другие вопросы по тегам