没有JobStore的Mule集群中的Quartz应用程序

时间:2017-01-26 16:04:47

标签: mule mule-cluster quartz

我们目前有一个内部集群环境,我们目前有2个节点集群。我们正在使用Mule 3.8.2运行时。 我们知道石英不是群集感知的,在谷歌搜索之后,我们发现如果我们在群集中部署石英,它将同时从两个节点触发。因此,我们需要在quartz

中配置JDBC Job Store

为了测试它,我在群集中部署了以下Mule流,没有任何作业存储:

<quartz:connector name="QuartzConn" validateConnections="true" doc:name="Quartz">
    <receiver-threading-profile maxThreadsActive="1"/>
</quartz:connector> 

<flow name="TestFlow" processingStrategy="synchronous">
    <quartz:inbound-endpoint name="connectorname" jobName="testjob" repeatInterval="10000"
                responseTimeout="10000" doc:name="QuartzConn" connector-ref="QuartzConn">
        <quartz:event-generator-job>
            <quartz:payload>This is a test payload</quartz:payload>
        </quartz:event-generator-job>
    </quartz:inbound-endpoint>
    <logger message="Server Name:- #[server.ip+'\n'] This is a message #[function:now]" level="INFO" doc:name="Logger"/>
    <file:outbound-endpoint path="E:\test" outputPattern="#[server.dateTime.format('YYYY-MM-dd-hh-mm-ss.sss')].txt" responseTimeout="10000" doc:name="File"/>
</flow>

但令我惊讶的是,我发现,目前只有一个节点正在执行石英,而且文件是用时间戳写在目标文件夹中的,而其他节点正静默等待,什么也没做!

Node1正在编写所有文件:

enter image description here

当Node2静静地等待并观察时:

enter image description here

(图片已附上)

所以,为了进一步测试,我关闭了Node1,我发现Node2开始挑选​​任务并正在编写文件。

请节点这是一个简单的石英应用程序,没有配置任何jdbc作业存储。那么,我该如何解释这个动作呢?两个节点都配置了mmc并且运行良好。

如果有人能够更详细地解释集群中的石英,那将会有所帮助。

由于

2 个答案:

答案 0 :(得分:0)

“我不想使用民意调查,因为我需要知道它的工作原因”......这是你的选择,但是Mule documentation明确指出民意调查范围在群集环境中是首选。

而在非集群环境中,您可以使用Quartz和JDBC jobstore来实现相同的功能,但有点复杂。解释herehere

答案 1 :(得分:-1)

如果你想尝试它的好,但是使用Mule集群你不需要添加Quartz,而是使用Poll scope。可能存在Mule集群已启用石英集群而没有JDBC作业存储。但是,在非集群Mule设置中(我们有2个非集群节点),只有选项可以使用带有JDBC作业存储的Quartz集群。

Mulesoft玩得很聪明。他们添加了Poll范围很好,但在典型的生产环境中至少有2个节点,您只需要一个节点进行轮询。只有当您购买Mule的集群(称为High Availablity)但仅在白金订阅(不是Gold)中提供时,才有可能实现此目的。因此,间接Mulesoft强迫客户购买或升级至白金订阅,以从同一产品中获取更多资金。