【问题标题】:Quartz application in Mule cluster without JobStore没有 JobStore 的 Mule 集群中的 Quartz 应用程序
【发布时间】:2017-06-12 04:15:48
【问题描述】:

我们目前有一个本地集群环境,我们目前有 2 个节点集群。我们正在使用 Mule 3.8.2 运行时。 我们知道,quartz 不是集群感知的,在谷歌搜索之后,我们发现如果我们在集群中部署石英,它将同时从两个节点触发。所以我们需要在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 正在写入所有文件:

当 Node2 默默地等待和观察时:

(附上图片)

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

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

如果有人能更详细地解释簇中的石英,那将很有帮助。

谢谢

【问题讨论】:

  • 在您的情况下两个节点都处于活动状态?还是节点 1 处于活动状态而节点 2 处于静默状态?只有在节点 1 发生灾难时,节点 2 才会处于活动状态,对吗?
  • 根据这里的 Mule 文档:- docs.mulesoft.com/mule-user-guide/v/3.8/… Mule 使用主动-主动模型来集群 Mule 运行时,而不是主动-被动模型。在双活模型中,集群中没有一个节点充当主节点;集群中的所有节点都支持该应用程序。因此,为了在集群中支持 Quartz,建议使用 JDBCJobStore,它将 Quartz 实例锁定为 Quartz in not cluster-aware ...
  • 我指的是以下线程:- forums.mulesoft.com/questions/40531/…quartz-scheduler.org/documentation/quartz-2.x/configuration/… 但现在令我惊讶的是,我发现它在没有 JDBCJobStore 的情况下工作
  • 没错。您可以通过任何一种方式实现集群环境的外观,这取决于架构师通过查看您的需求来做出的决定。我想问的是你的集群环境实现模式是“主动-主动”还是“主动-被动模式”?请确认。
  • 我使用 mmc 创建集群并使用 mmc 进行部署。有什么方法可以判断模式是“主动-主动”还是“主动-被动模式”?

标签: mule mule-cluster quartz


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果您只想试试它的性能,但使用 Mule 集群则无需添加 Quartz,而是使用 Poll scope。 Mule 集群的存在可能启用了没有 JDBC 作业存储的石英集群。然而,在非集群 Mule 设置中(我们有 2 个非集群节点),带有 JDBC 作业存储的 Quartz 集群是唯一的选择。

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

    【讨论】:

    • 这不是真的.. Quartz 不支持集群,因此 Mule 集群的存在无法启用 Quartz 集群.. 其次,我不想使用 poll,因为我需要知道它的原因像 Mule 声称这两个节点都是“主动-主动”的。所以我需要知道我是否在这里遗漏了什么,或者 Mule 是否对石英做了一些事情以使其集群知道我在任何文档中都找不到的东西
    • @KalyanKundu,当您在集群环境中运行 Mule 时,所有与文件、FTP 和 JDBC 等传输一起使用的非分布式存储 - 这些存储一次由单个节点读取。默认情况下,quartz 使用内存中的作业存储,所有集群的 Mule 实例共享内存。这可能会解释您的情况。但是,在 Mule 文档中没有这样的参考。我建议通过 Mule 支持确认它。
    猜你喜欢
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2018-01-09
    相关资源
    最近更新 更多