2

私は以下のようなラバの流れを持っています

<flow name="flow1" doc:name="f1">
    <file:inbound-endpoint path="C:\input" responseTimeout="10000"
        doc:name="File" />
</flow>

<flow name="flow2" doc:name="f2">
    <http:inbound-endpoint address="http://localhost:8080"
        doc:name="HTTP" exchange-pattern="request-response" />
    <flow-ref name="flow1" doc:name="Flow Reference" />
    <file:outbound-endpoint path="C:\outputfile"
        responseTimeout="10000" doc:name="File" />
</flow>

フローを使用して、ソースから宛先に複数のファイルを移動/アップロードしようとしています (FTP やファイルの送信など、何でもかまいません)。

このようにする理由は、CURL を使用して CLI(Command Line Interface) からジョブを呼び出したいからです。

しかし、それは機能していません....

編集済み

ハード ドライブにある特定のフォルダからいくつかのファイル (複数のファイル) を取得する必要があります。そして、それらをFTPサイトまたは他のハードドライブの場所であるアウトバウンドプロセスに移動します。ただし、このフローは CLI から呼び出す必要があります。

編集済み(Davidの回答に基づく)

私は今、以下のような流れを持っています

<flow name="filePickupFlow" doc:name="flow1" initialState="stopped">
     <file:inbound-endpoint path="C:\Input" responseTimeout="10000" doc:name="File"/>
            
      <logger message="#[message.payloadAs(java.lang.String)]" level="ERROR" />
</flow>

<flow name="flow2" doc:name="flow2">
  <http:inbound-endpoint address="http://localhost:8080/file-pickup/start" doc:name="HTTP" exchange-pattern="request-response"/>
  
  <expression-component>
        app.registry.filePickupFlow.start();
    </expression-component>
 
 <file:outbound-endpoint path="C:\outputfile" responseTimeout="10000" doc:name="File"/>

</flow>

私はいくつかの問題を抱えています

a) 次のエラーが表示されます -属性 initialState がフローの有効なプロパティとして定義されていません

ここに画像の説明を入力

ただし、その属性を削除すると、"http://localhost:8080/file-pickup/start"起動を待たずにフローが続行されます。

b) ファイルが宛先フォルダーに移動されない

では、どうすればそうできますか?

4

3 に答える 3

4

インバウンド エンドポイントを含むフローを参照することはできません。そのようなフローは既にアクティブであり、そのインバウンド エンドポイントからのイベントを消費しているため、オンデマンドで呼び出すことができないためです。

以下は、Mule 3.3.1 でテストされており、HTTP 要求からオンデマンドで「ファイル ピックアップ フロー」を開始する方法を示しています。

<flow name="filePickupFlow" initialState="stopped">
    <file:inbound-endpoint path="///tmp/mule/input" />
    <!-- Do something with the file: here we just log its content -->
    <logger message="#[message.payloadAs(java.lang.String)]" level="ERROR" />
</flow>

<flow name="filePickupStarterFlow">
    <http:inbound-endpoint address="http://localhost:8080/file-pickup/start"
        exchange-pattern="request-response" />
    <expression-component>
        app.registry.filePickupFlow.start();
    </expression-component>
    <set-payload value="File Pickup successfully started" />
</flow>

次に、 HTTP GETtinghttp://localhost:8080/file-pickup/startによって が開始filePickupFlowされ、次に でファイルが処理されます/tmp/mule/input

file:connectorファイルを削除するか、別のディレクトリに移動するかの 2 つの主なオプションのいずれかで、処理するファイルに対して必要な動作を構成するのはユーザー次第であることに注意してください。

于 2013-01-31T19:20:52.360 に答える
0

この場合、オンデマンドでファイルを読み取るためのファイル インバウンドは役に立たないと思います。

以下の方法でよろしければお試しください。

<flow name="flow1" doc:name="f2">
    <http:inbound-endpoint address="http://localhost:8080"
        doc:name="HTTP" exchange-pattern="request-response" />
    <component>
        <spring-object bean="fileLoader"></spring-object>
    </component>
   <file:outbound-endpoint path="C:\outputfile"
       responseTimeout="10000" doc:name="File" />
</flow>

したがって、カスタム コンポーネントは、指定した場所からファイルを読み取るクラスになります。

お役に立てれば。

于 2013-02-01T15:36:21.157 に答える