我有一个骡子流,如
<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(命令行界面)调用作业。
但它没有用......
编辑:
爵士 我的要求如下
我需要从位于硬盘中的特定文件夹中获取一些文件(多个文件)。然后将它们移动到一些可以是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)文件不会移动到目标文件夹
那我怎么能这样做呢?
请帮忙
答案 0 :(得分: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 GETting http://localhost:8080/file-pickup/start
然后会启动filePickupFlow
,/tmp/mule/input
会处理file:connector
中的文件。
请注意,您需要配置{{1}}它处理的文件必须具有的行为,删除它们或将它们移动到另一个目录是两个主要选项。
答案 1 :(得分: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>
因此,Custom组件将是一个从指定位置读取文件的Class。
希望这有帮助。
答案 2 :(得分:0)
您可以使用Mule Requester获得干净的解决方案。请参阅博客文章Introducing the Mule Requester中的详细信息。