2

私は基本的に2つのフローを持っています:

  1. HTTP インバウンド エンドポイントは、バッチ XML を受信し、個々の部分に分割して、JMS キューにステージングします。
  2. ステージングされた XML を JMS キューから読み取り、メッセージを処理します。

上記のフロー 2 の実行を Rest 呼び出しを使用して制御する必要があります (つまり、フロー 2 は、HTTP インバウンド呼び出しが受信された場合にのみ実行する必要があります)。Mule バージョン 3.2.2 を使用しています

フローは次のとおりです。

         <flow name="flow-stage-input">
           <http:inbound-endpoint   host="localhost" 
                        port=   "8082" 
                        path=   "test/order"
                        exchange-pattern=   "request-response"
                                    >

           </http:inbound-endpoint>
          <object-to-string-transformer></object-to-string-transformer>
          <splitter evaluator="xpath" expression="//Test/TestNode" enableCorrelation="ALWAYS"/>
          <custom-transformer class="org.testing.transformers.DocumentToString"></custom-transformer>

          <pooled-component>
                <spring-object bean="receiver"></spring-object>
          </pooled-component>

          <!-- DECIDE SUCCESS OR FAILURE --> 
          <choice>
                <when expression="//Test/TestNode" evaluator="xpath">
            <jms:outbound-endpoint queue="stagingQueue" exchange-pattern="one-way" connector-ref="jmsConnector" />
            </when>
            <otherwise>
                <logger message="Skipped staging message due to errors" level="ERROR" /> 
            </otherwise>
          </choice>
          <collection-aggregator></collection-aggregator>
          <custom-transformer class="org.testing.transformers.ListOfStringsToString"></custom-transformer>
          <!-- RESPONSE SENT BACK TO CALLER -->
        </flow>




        <flow name="flow-process-jms-input" > 
           <jms:inbound-endpoint  queue="stagingQueue" exchange-pattern="one-way" connector-ref="jmsConnector" />
           <pooled-component>
            <spring-object bean="processor"></spring-object>
           </pooled-component>
           <!-- DECIDE SUCCESS OR FAILURE  -->
           <choice>
                 <when expression="//ErrorCondition/Path" evaluator="xpath">
                <jms:outbound-endpoint queue="errorQueue" exchange-pattern="one-way" connector-ref="jmsConnector" />
             </when>
             <otherwise>
                <logger message="Message processed successfully" level="ERROR" /> 
             </otherwise>
           </choice>
         </flow>
4

1 に答える 1

2

フロー 2 で Groovy スクリプトを使用して、以下を使用してキューから 1 つの JMS メッセージを要求します。

muleContext.client.request("jms://stagingQueue", 0)

これは、キューが空の場合に返さnullれます。それ以外の場合は、JMS メッセージを含む Mule メッセージが返されます。

于 2012-10-26T20:44:59.653 に答える