Mule 如何使用Quartz组件计划服务,该组件将定期调用文件上传程序?
这是我先前问题的延伸。要求规定,每周三上午10点必须上传文件。从今以后,我需要一个计划来完成这项工作。我发现解决方案是带有Cron表达式的“Quartz”入站组件 但我怎么能这样做呢?因为我不能有两个“入站端点”(quartz和file)Mule 如何使用Quartz组件计划服务,该组件将定期调用文件上传程序?,mule,mule-studio,Mule,Mule Studio,这是我先前问题的延伸。要求规定,每周三上午10点必须上传文件。从今以后,我需要一个计划来完成这项工作。我发现解决方案是带有Cron表达式的“Quartz”入站组件 但我怎么能这样做呢?因为我不能有两个“入站端点”(quartz和file) 您有两个选择: a。用处理文件处理的组件替换文件入站端点。它将由Quartz触发,从文件夹中拾取文件并将其传递到出站端点 b。不要使用Quartz端点并覆盖org.mule.transport.file.FileMessageReceiver来实现轮询文件的
您有两个选择:
a。用处理文件处理的组件替换文件入站端点。它将由Quartz触发,从文件夹中拾取文件并将其传递到出站端点
b。不要使用Quartz端点并覆盖org.mule.transport.file.FileMessageReceiver来实现轮询文件的自定义调度
第一种选择比较简单。如果你找不到确切的需要,下面的方法只是一个工作循环
1-您可以有2个流而不是一个流,一个用于正常入站,另一个用于quartz:inbound端点
2-您可以让您的调度程序将消息放入队列,并使用其他流从该队列中拾取消息并进行处理
3-您可以有一个带有quartz:inbound端点的组件,如下所示
希望上面的其中一个有帮助。很抱歉,无法将此作为评论,因为它太长了,所以这里是Mule网站的
示例:
<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>
端点轮询作业将尝试在任何Mule端点上执行“请求”。如果收到结果,则会将其交给此“testService5”服务进行处理。触发器将每5分钟触发一次,从每天下午2点开始,到下午2:55结束。在此期间,作业将每隔5分钟检查文件目录/N/drop data/,以查看是否有任何事件数据可用。如果目录中没有文件,请求将在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>
请提供点a和点b的配置好吗?我的意思是将您已有的内容分成两个流,每个入站都有一个流,两个出站都有一个流。如果那不是你想搜索的,看看是否有帮助,你能验证一下我在编辑部分输入的流程是否就是你所说的流程吗?我认为这是可行的,我已经添加了一个示例作为回答,因为它太长,无法发表评论。请您告诉我们connector-ref…什么是connector?它在这里的文档中,不确定您是否有mule的帐户。
<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>