这是我之前提问How to upload multiple files via REST over HTTP using Mule?的扩展。要求说,在每个星期三上午10点,必须上传文件。从此以后我需要一个调度程序来完成这个任务。我发现解决方案是带有Cron Expression的“Quartz”入站组件。
但我怎么能这样做?因为我不能有两个“入站端点”。(石英和文件),例如。
<flow name="fileUploader" doc:name="fileUploader">
<quartz:inbound-endpoint
jobName="myServiceJob"
repeatInterval="5000"
cronExpression="0 0 10 ? * WED
doc:name="Quartz">
<quartz:event-generator-job/>
</quartz:inbound-endpoint>
<file:inbound-endpoint
path="C:\input"
pollingFrequency="5000" moveToDirectory="C:\movehere" doc:name="File"
responseTimeout="10000"/>
<object-to-byte-array-transformer doc:name="Object to Byte Array"/>
<file:outbound-endpoint
path="C:\outputfile"
responseTimeout="10000"
doc:name="File"/>
</flow>
如果我跑,我会收到错误
线程“main”中的异常org.mule.module.launcher.DeploymentInitException:SAXParseException:cvc-complex-type.2.4.a:找到以元素'file:inbound-endpoint'开头的无效内容。< /强>
那么我需要做的改变是什么?
请帮忙
答案 0 :(得分:4)
试试这个
<file:endpoint name="fileConnector" path="C:\input" pollingFrequency="5000" doc:name="File"/>
<flow name="fileUploader" doc:name="fileUploader">
<quartz:inbound-endpoint
jobName="myServiceJob"
repeatInterval="5000"
cronExpression="0 0 10 ? * WED"
doc:name="Quartz">
<quartz:endpoint-polling-job>
<quartz:job-endpoint ref="fileConnector"/>
</quartz:endpoint-polling-job>
</quartz:inbound-endpoint>
<file:outbound-endpoint
path="C:\outputfile"
responseTimeout="10000"
outputPattern="#[message.inboundProperties.originalFilename]"
doc:name="File"/>
</flow>
答案 1 :(得分:1)
您有两种选择:
一个。使用处理文件处理的组件替换文件入站端点。它将由Quartz触发,从文件夹中获取文件并将其传递给出站端点。
湾不要使用Quartz端点并覆盖org.mule.transport.file.FileMessageReceiver来实现轮询文件的自定义计划。
第一种选择是更容易的选择。
答案 2 :(得分:0)
以下只是一轮工作,如果你找不到你需要的确切内容。
1-您可以有2个流而不是1个,一个用普通入站进行正常工作,一个用于石英:入站端点。
2-您可以让您的调度程序将消息放入队列,并有另一个流来从该队列和进程中获取消息。
3-你可以在这里建议使用quartz:inbound-endpoint的组件http://blogs.mulesoft.org/using-quartz-to-trigger-a-service/
希望以上其中一项有所帮助。
答案 3 :(得分:0)
很抱歉无法将此作为评论,因为它太长了所以这里是来自Mule网站<quartz:endpoint-polling-job>
的示例:
<service name="testService5">
<description>
The endpoint polling Job will try and perform a 'request' on any Mule endpoint. If a result is received it will be handed off to this 'testService5' service for processing. The trigger will fire every 5 minutes starting at 2pm and ending at 2:55pm, every day. during this period the job will check the file directory /N/drop-data/in every 5 minutes to see if any event data is available. The request will timeout after 4 seconds if there are no files in the directory.
</description>
<inbound>
<quartz:inbound-endpoint name="qEP5" cronExpression="0 0/5 14 * * ?" jobName="job5"
connector-ref="quartzConnector1">
<quartz:endpoint-polling-job>
<quartz:job-endpoint address="file:///N/drop-data/in" timeout="4000"/>
</quartz:endpoint-polling-job>
</quartz:inbound-endpoint>
</inbound>
</service>
希望以上帮助