在集群环境中使用 Quartz 和 Mule

Using Quartz with Mule in Clustered Environment

我有一个场景,我正在尝试从 Yelp API 读取数据并希望在一定时间间隔后将其放入 ActiveMQ 队列中,所以我使用石英调度程序 same.My 石英调度器每 10 分钟运行一次并将数据推送到队列中, 到这里为止一切都很好,

现在我希望它在集群环境中工作,我将在其中部署 2 个实例并监听相同的 Yelp 端点,现在发生的事情是,来自 2 个实例的石英调度程序同时执行实例,他们从 Yelp 中提取相同的信息,导致相同的消息出现在 ActiveMQ 队列中,即重复,(我想使用集群环境来实现高可用性,即如果任何节点发生故障,其他节点可以接管。)

那么有没有什么配置,在Mule中可以将一个节点提升为master,将另一个节点提升为故障转移节点。

感谢大家的帮助!

我们使用的是3.5.2-企业版,但不确定社区版是否有限制。您能否尝试以下方法,看看是否可行:

<!-- Quart Connector with one thread to ensure that we don't have duplicate processing at any point of time -->
<quartz:connector name="QuartzConnector" validateConnections="true">
    <receiver-threading-profile maxThreadsActive="1" />
</quartz:connector> 

然后在您计划触发此操作的任何地方引用此内容。

<flow name="test">
    <quartz:inbound-endpoint jobName="myQuartzJob" cronExpression="${my.job.cron.expression}" repeatInterval="${my.job.repeat.interval}" responseTimeout="${my.job.response.timeout}" connector-ref="QuartzConnector">
        <quartz:event-generator-job>
            <quartz:payload>blah</quartz:payload>
        </quartz:event-generator-job>
    </quartz:inbound-endpoint>
</flow>    

希望有用。

这将由 cron 表达式 0/10 * * * * ?(每 10 秒)针对所有节点之一触发 运行 连接到同一应用程序并连接到同一数据库(MySQL这个案例)。 Quartz 设置有点混乱。您需要配置数据库等,但我让您为此研究 Quartz 文档。您应该查看版本 1.8.x 而不是 2.x.

它几乎是 Mule EE 中集群端点的一种预算替代方案。当您不想集群 EE 节点或需要 运行 CE 节点时,它很有用。

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:quartz="http://www.mulesoft.org/schema/mule/quartz" xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" 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.6.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="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/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd
http://www.mulesoft.org/schema/mule/quartz http://www.mulesoft.org/schema/mule/quartz/current/mule-quartz.xsd">

    <quartz:connector name="quartzConnector" validateConnections="true" doc:name="Quartz">
        <quartz:factory-property key="org.quartz.scheduler.instanceName" value="QuartzScheduler" />
        <quartz:factory-property key="org.quartz.scheduler.instanceId" value="AUTO" />
        <quartz:factory-property key="org.quartz.jobStore.isClustered" value="true" />
        <quartz:factory-property key="org.quartz.scheduler.jobFactory.class" value="org.quartz.simpl.SimpleJobFactory" />
        <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.impl.jdbcjobstore.JobStoreTX" />
        <quartz:factory-property key="org.quartz.jobStore.driverDelegateClass" value="org.quartz.impl.jdbcjobstore.StdJDBCDelegate" />
        <quartz:factory-property key="org.quartz.jobStore.dataSource" value="quartzDataSource" />
        <quartz:factory-property key="org.quartz.jobStore.tablePrefix" value="QRTZ_" />

        <quartz:factory-property key="org.quartz.dataSource.quartzDataSource.driver"  value="com.mysql.jdbc.Driver" />

        <quartz:factory-property key="org.quartz.dataSource.quartzDataSource.URL" value="jdbc:mysql://localhost:3306/qrtz" />
        <quartz:factory-property key="org.quartz.dataSource.quartzDataSource.user" value="root" />
        <quartz:factory-property key="org.quartz.dataSource.quartzDataSource.password"  value="" />
        <quartz:factory-property key="org.quartz.dataSource.quartzDataSource.maxConnections"  value="8" /> 

    </quartz:connector>

    <flow name="cFlow1">
        <quartz:inbound-endpoint jobName="job1" cronExpression="0/10 * * * * ?" repeatInterval="0" connector-ref="quartzConnector" responseTimeout="10000" doc:name="Quartz">
            <quartz:event-generator-job>
                <quartz:payload>Job Trigger</quartz:payload>
            </quartz:event-generator-job>
        </quartz:inbound-endpoint>
        <logger level="INFO" message="Got message" doc:name="Logger"/>
    </flow>        
</mule>