0

jmsインバウンドエンドポイントで始まるラバフローがあります。私の要件は、エンドポイントのコネクタを明示的に有効にするまで、キューがメッセージを読み取らないようにすることです。したがって、MuleContextNotificationListenerを実装するInitializerがあり、以下のように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呼び出しからコネクタを開始/停止するコードはすでにあります。

アノテーションなしでMule3.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 に答える