Как остановить запуск mule flow после запуска

У меня есть поток мула, который начинается с входящей конечной точки jms. Мое требование - запретить очереди читать какие-либо сообщения, пока я явно не включу соединитель для конечной точки. Итак, у меня есть инициализатор, реализующий MuleContextNotificationListener, переопределите onNotification, как показано ниже:

@Override
public void onNotification(MuleContextNotification ctxNotification) {

    System.out.println("Notification order event: " + ctxNotification.getActionName() );


    if(ctxNotification.getAction() == MuleContextNotification.CONTEXT_STARTING
            || ctxNotification.getAction() == MuleContextNotification.CONTEXT_STARTED){
        try{
            //Startup with the Staging and Error Q readers disabled.
            System.out.println("STOPPING QUEUES : Staging and Error Queues");
            //ctxNotification.getMuleContext().getRegistry().lookupConnector("lynxJMSConnectorStagingQReaderNormal").stop();
            ctxNotification.getMuleContext().getRegistry().lookupConnector("lynxJMSConnectorStagingQReaderDR").stop();
            ctxNotification.getMuleContext().getRegistry().lookupConnector("lynxJMSConnectorErrorQReader").stop();
            ctxNotification.getMuleContext().getRegistry().lookupEndpointFactory().getInboundEndpoint("errorQueueReader").stop();

            System.out.println("STOPPED QUEUES");

        }catch(MuleException me){
            me.printStackTrace();
        }
    }

}

Но поток по-прежнему запускается (считывает сообщения из очереди jms) даже во время инициализации приложения. Что мне делать, чтобы перехватить инициализацию коннектора, чтобы я мог его остановить? Если нет, то какой механизм мне следует использовать, чтобы коннектор не считал его. У меня уже есть код для запуска / остановки коннектора при HTTP-вызове.

Я использую Mule 3.2.2 без аннотаций.

Спасибо,


person Sathya Pillutla    schedule 13.03.2013    source источник


Ответы (2)


Вместо того, чтобы пытаться остановить поток во время фазы инициализации, настройте его так, чтобы он останавливался при запуске Mule:

<flow name="..." initialState="stopped">

затем пусть ваша собственная логика запустит ее, когда будет подходящее время, например, используя MEL:

<expression-component>app.registry.targetFlow.start();</expression-component>
person David Dossot    schedule 13.03.2013
comment
Большое спасибо, Дэвид. Подскажите, пожалуйста, красивое выражение лица, чтобы потом остановить поток? - person Sathya Pillutla; 13.03.2013
comment
Подскажите, пожалуйста, как потом запустить поток с помощью отличного скрипта? - person Sathya Pillutla; 13.03.2013
comment
Объясняется далее в ответе. - person David Dossot; 14.03.2013

В качестве альтернативы есть файл свойств под названием mule-deploy.properties
Вы можете найти там, все имена потоковых xml файлов записываются туда вручную: -

config.resources=yourFlowName.xml

Вы можете удалить имя потока, которое вы не хотите запускать во время запуска приложения Mule.
Но да, решение Дэвида рекомендуется, и вы должны использовать это решение только в качестве альтернативы.

person Anirban Sen Chowdhary    schedule 07.08.2015