2017-03-22 4 views
0

私は自分のフローのコンテキストで正しい変数を使用しているかどうかを理解できません。複数の要求が現在使用中のフロー変数を上書きできますか?

私は、HTTPエンドポイント経由で公開されているフローを持っています。このフローでは、着信要求に関するデータを格納し、フロー/サブフローを介してデータを含むフロー変数を使用します。

私の質問は、2つのリクエストが同時に入力された場合、フローチェーンの後に問題を引き起こすフロー変数を上書きするかどうかです。

私は、データを処理し、要求2.

からのデータで上書きされたフロー変数を参照するために続けること、これがどのように動作するかこれは、可変流量を設定要求1を避けるためにしたいですか?それぞれの流れが互いに独立しているか?

+0

質問タイトルは誤解を招くものです..どのようにrequest1とrequest2を区別しますか?彼らはどちらも同じ要求ですか? –

+0

それらは単一のエンドポイントから入ってくるでしょう。リクエストの内容は、同時に来る両方の有効なリクエストであると仮定すると、モジュラ・フロー・デザインで使用されるフロー変数を上書きしますか? –

+0

私が尋ねる理由は、それらを差別化できるかどうかです。簡単にフィルタリングできます...必要ではないコンテンツは異なっていなければならず、ヘッダーや他のパラメータのような他のパラメータもそれらを区別することができます –

答えて

0

フロー変数はインスタンス変数であり、新しいリクエストのたびに作成されます。したがって、リクエストごとに独自のインスタンス変数があるため、複数のリクエストでフロー変数をオーバーライドすることはできません。

1

私は2要求が同時に入って来ている場合、彼らは基本的に が

フローチェーンの後のフロー変数原因となる問題を上書きされます

ません。変数はメッセージに格納されます。すべてのHTTP要求に対して、新しいメッセージが作成されます。

あなたは簡単に次のアプリケーションを自分でそれを試してみることができます:

<?xml version="1.0" encoding="UTF-8"?> 

<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
    xmlns:spring="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd 
http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd"> 
    <flow name="foo"> 
     <http:listener config-ref="user-httpListenerConfig" path="/{test}" doc:name="HTTP"/> 
     <set-variable variableName="testVariable" value="#[message.inboundProperties['http.uri.params']['test']]" doc:name="testVariable"/> 
     <foreach collection="#[[1,2,3,4,5,6,7,8,9,0]]" doc:name="For Each"> 
      <logger message="#[flowVars.testVariable]" level="INFO" doc:name="Logger"/> 
      <scripting:component doc:name="Groovy"> 
       <scripting:script engine="Groovy"> 
       <![CDATA[Thread.sleep(1000) 
return payload]]></scripting:script> 
      </scripting:component> 
     </foreach> 
    </flow> 
</mule> 

これは、このアプリケーションがAnypointStudioで次のようになります。 enter image description here

はただ一つのタブでは、ブラウザからhttp://localhost:8081/fooを呼び出してhttp://localhost:8081/bar別のタブであなたのログにはfoobarの両方が交互に印刷されています。

0

"私の質問は、2つのリクエストが同時に入力された場合、基本的にフロー変数の後に問題を引き起こすフロー変数を上書きするのでしょうか?"
はい、それぞれの新しい要求が新しいフローインスタンスごとに正しく作成され、変数は新しいリクエストごとに初期化されます。
リクエストが残っている場所からのフロー変数値を保持するためにオブジェクトストアのような種類の記憶域を使用するまで、各リクエストは互いに独立しています。
オブジェクトストアのようなメモリストアを使用すると、新しいリクエストごとに変数値を保持できます。それ以外の場合、新しいリクエストによってフロー内に新しい変数インスタンスが作成されます。

関連する問題