Mule - 同时运行相同流的更多实例

时间:2013-09-06 10:24:17

标签: mule mule-studio

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

    <?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. 能够以某种方式停止/启动某个实例。

  3. 我该怎么做? 谢谢

1 个答案:

答案 0 :(得分:1)

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

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

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

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