0

我有一个以 jms 入站端点开始的 mule 流。我的要求是防止队列读取任何消息,直到我明确启用端点的连接器。所以我有一个实现 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。

谢谢,

4

2 回答 2

3

与其在初始化阶段尝试停止流程,不如将其配置为在 Mule 启动时停止:

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

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

<expression-component>app.registry.targetFlow.start();</expression-component>
于 2013-03-13T15:19:07.803 回答
1

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

config.resources=yourFlowName.xml

您可以在 Mule 应用程序启动时删除您不想启动的流程名称。
但是,是的,推荐使用 David 的解决方案,您应该仅将此解决方案用作替代方案。

于 2015-08-07T12:01:30.737 回答