Jms 如何在启动后阻止mule流运行

Jms 如何在启动后阻止mule流运行,jms,mule,endpoint,connector,Jms,Mule,Endpoint,Connector,我有一个以jms入站端点开始的mule流。 我的要求是在显式启用端点的连接器之前,防止队列读取任何消息。 因此,我有一个实现MuleContextNotificationListener的初始值设定项,覆盖通知,如下所示: @Override public void onNotification(MuleContextNotification ctxNotification) { System.out.println("Notification order event: " + ctx

我有一个以jms入站端点开始的mule流。 我的要求是在显式启用端点的连接器之前,防止队列读取任何消息。 因此,我有一个实现MuleContextNotificationListener的初始值设定项,覆盖通知,如下所示:

@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


谢谢,

不要在初始化阶段尝试停止流,而是将其配置为在Mule启动时停止:

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

然后让您的自定义逻辑在时间合适时启动,例如使用MEL:

<expression-component>app.registry.targetFlow.start();</expression-component>
app.registry.targetFlow.start();

不要在初始化阶段尝试停止流,而是将其配置为在Mule启动时停止:

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

然后让您的自定义逻辑在时间合适时启动,例如使用MEL:

<expression-component>app.registry.targetFlow.start();</expression-component>
app.registry.targetFlow.start();

另外还有一个名为mule deploy.properties的属性文件
您可以在那里找到,所有流xml文件名都是手动写入的:-

config.resources=yourFlowName.xml
您可以删除在Mule应用程序启动时不希望启动的流名称。

但是,是的,建议使用David的解决方案,您应该仅将此解决方案用作替代方案

另外还有一个名为mule deploy.properties的属性文件
您可以在那里找到,所有流xml文件名都是手动写入的:-

config.resources=yourFlowName.xml
您可以删除在Mule应用程序启动时不希望启动的流名称。

但是,是的,建议使用David的解决方案,您应该仅将此解决方案用作替代方案

非常感谢大卫。你能告诉我groovy表达式在以后启动或停止流吗?你能告诉我如何使用groovy脚本启动流吗?在回答中作了进一步解释。非常感谢David。您能告诉我groovy表达式稍后启动或停止流吗?您能告诉我如何使用groovy脚本启动流吗?在响应中作了进一步解释。