0

これは私のラバフロー 1です。

HTTP > Payload String > Logger > JMS /normalqueue

最初のフローには次のものがありerror handlingます。

File(処理されるメッセージごとにファイルを書き込みます)

フロー 2 :

JMS /normalqueue > Logger

リカバリ フロー( groovy スクリプトで呼び出す):

File (Read file) > File to String > Flow reference (To First Flow again)

これは、Mule からの XML です。

<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
<jms:activemq-connector name="Active_MQ" username="admin" password="admin" brokerURL="tcp://192.168.198.131:61616" validateConnections="true" doc:name="Active MQ" persistentDelivery="true">
    <reconnect blocking="false" frequency="6000"/>
</jms:activemq-connector>
<file:connector name="File" writeToDirectory="C:\errors" autoDelete="true" streaming="true" validateConnections="true" doc:name="File"/>
<flow name="lab-file-catchFlow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
    <set-payload value="#[message.payloadAs(java.lang.String)]" doc:name="Set Payload"/>
    <logger message="Started message: #[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/>
    <jms:outbound-endpoint queue="activemq" connector-ref="Active_MQ" doc:name="JMS">
        <jms:transaction action="ALWAYS_BEGIN"/>
    </jms:outbound-endpoint>
    <catch-exception-strategy doc:name="Catch Exception Strategy">
        <file:outbound-endpoint path="C:\errors" connector-ref="File" responseTimeout="10000" doc:name="File"/>
    </catch-exception-strategy>
</flow>
<flow name="flow-recovery" initialState="stopped" processingStrategy="synchronous">
    <file:inbound-endpoint path="C:\errors" connector-ref="File" responseTimeout="10000" doc:name="File"/>
    <file:file-to-string-transformer doc:name="File to String"/>
    <logger message=" Recovery message: #[message.payloadAs(java.lang.String)]" level="ERROR" doc:name="Logger"/>
    <flow-ref name="lab-file-catchFlow" doc:name="Flow Reference"/>
</flow>
<flow name="lab-file-catchFlow2" processingStrategy="synchronous">
    <jms:inbound-endpoint queue="activemq" connector-ref="Active_MQ" doc:name="JMS"/>
    <logger message="#[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/>
</flow>
<flow name="lab-file-catchFlow1" >
    <http:listener config-ref="HTTP_Listener_Configuration" path="/modify" doc:name="HTTP"/>
    <scripting:component doc:name="Groovy">
        <scripting:script engine="Groovy"><![CDATA[            if(muleContext.registry.lookupFlowConstruct('flow-recovery').isStopped())
             {
              muleContext.registry.lookupFlowConstruct('flow-recovery').start();
              return 'Started';
             } else
             {
             muleContext.registry.lookupFlowConstruct('flow-recovery').stop();
             return 'Stopped';
             }]]></scripting:script>
    </scripting:component>
    <set-payload value="#[message.payloadAs(java.lang.String)]" doc:name="Set Payload"/>
    <logger message="#[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/>
</flow>
  1. からサービスを停止するActiveMQと、エラー処理からのメッセージを含むファイルが保存され、典型的なエラーが表示されます。

「Active_MQ」が停止しているため、イベントを処理できません

  1. 次に、ActiveMQ serviceもう一度実行し、groovy スクリプトを使用して回復フローを開始します。そのフローはすべてのメッセージを回復し、文字列に変換して、最初のフローに戻って再キューイングします。

問題は、サービスが再実行されたときにミュールが検出されないことです。これを検出するには、ミュール プロジェクトを再起動する必要があります。

ActiveMQ が Mule で再び実行されていることを自動検出する方法はありますか?

4

1 に答える 1