1

我有一个复杂的流程,可以大大简化为这个流程(为了这个问题):

    <?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:context="http://www.springframework.org/schema/context" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:ajax="http://www.mulesoft.org/schema/mule/ajax" xmlns:quartz="http://www.mulesoft.org/schema/mule/quartz"
    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" version="EE-3.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/quartz http://www.mulesoft.org/schema/mule/quartz/current/mule-quartz.xsd
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/ajax http://www.mulesoft.org/schema/mule/ajax/current/mule-ajax.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
<quartz:connector name="quartzConnector_vm" validateConnections="true" doc:name="Quartz">  
     <quartz:factory-property key="org.quartz.scheduler.instanceName" value="MuleScheduler1"/>  
     <quartz:factory-property key="org.quartz.threadPool.class" value="org.quartz.simpl.SimpleThreadPool"/>  
     <quartz:factory-property key="org.quartz.threadPool.threadCount" value="3"/>  
     <quartz:factory-property key="org.quartz.scheduler.rmi.proxy" value="false"/>  
     <quartz:factory-property key="org.quartz.scheduler.rmi.export" value="false"/>  
     <quartz:factory-property key="org.quartz.jobStore.class" value="org.quartz.simpl.RAMJobStore"/>  
   </quartz:connector>
    <context:property-placeholder location="my-mule-app.properties"/>  
    <flow name="testQuartzFlow1" doc:name="testQuartzFlow1">
        <quartz:inbound-endpoint cronExpression="${SCHEDULE_FREQUENCY}" responseTimeout="10000" connector-ref="quartzConnector_vm" doc:name="Event_generator" jobName="pollastro">
            <quartz:event-generator-job groupName="DEFAULT" jobGroupName="DEFAULT">
                <quartz:payload>"${WHOAMI}"</quartz:payload>
            </quartz:event-generator-job>
        </quartz:inbound-endpoint>
        <logger level="INFO" doc:name="Logger" message="#[message:payload]"/>
    </flow>  
</mule>

基本上是一个石英组件,每隔一定时间(从属性文件中读取)触发一个记录器,该记录器记录从属性文件中获取的另一个数据。

我想要的是:

  1. 要同时运行同一流的多个实例,每个实例具有一组不同的属性(包含在文件中)

  2. 能够以某种方式停止/启动某个实例。

我怎样才能做到这一点?谢谢

4

1 回答 1

1

对于 1),我听说有一个实验模块,它允许在启动时使用配置模板和模板中的替换值。不幸的是,我现在找不到它,但如果可以的话,我会更新我的答案。

或者,如果每个quartz:inbound-endpoints 之后发生的事情都相同,您可以将它们包装在 a 中<composite-source>,并在启动时以编程方式向该源添加更多端点。

其他替代方法是使用自定义代码完全构建流程,甚至基于属性文件生成 XML 配置作为 Mule 启动前阶段。

对于 2)您可以通过 JMX 控制端点(连接/断开连接),因此理论上,您应该能够以这种方式控制 Quartz 端点。

于 2013-09-07T16:02:19.177 回答