簡體   English   中英

如何在 spring-boot 中運行集群的 camel-quartz 調度程序

[英]How to run clustered camel-quartz schedulers in spring-boot

我們的組件有多個駱駝石英調度器。 當我們在不同的服務器上部署應用程序的多個實例時,這些調度程序會在所有實例中運行並執行邏輯。 我們希望這些實例中只有一個應該運行調度程序。

為此,我們想到了使用 Quartz 的集群調度模式。 為此,我讀到我們需要將相關屬性放在quartz.properties 文件中,isClustered=true。 這里要注意的是,我們使用 Apache Ignite 作為我們的持久存儲。 所以我也把 ignite jdbc thin driver 作為我們的數據源。 屬性文件放在 src/main/resources 文件夾中,我們的駱駝 routeBuilder 如下:

public void configure() throws Exception
    {
        AbstractApplicationConfiguration.RouteConfig routeConfig = appConfig.getCamel().fetchRoute(ROUTE_ID);
        from(routeConfig.getInputEndpoints()[0])
            .to(appConfig.getCamel().getMetricEndpoints().getTimerEndpoint() + "&" + CAMEL_MICROMETER_ACTION_START + "&" + CAMEL_MICROMETER_TAG_ROUTE + ROUTE_ID)
            .to(appConfig.getCamel().getMetricEndpoints().getCounterEndpoint() + "&" + CAMEL_MICROMETER_ACTION_START + "&" + CAMEL_MICROMETER_TAG_ROUTE + ROUTE_ID)
    }

根據用作參考的資源來實現這一點: https ://developers.redhat.com/blog/2017/08/10/using-clustered-camel-quartz-jobs-on-jboss-eapquartz.properties 應該是默認設置,但是當我們在兩個不同的實例中運行我們的應用程序時,調度程序仍然在兩個實例中運行。

在調試模式下運行此應用程序后,我也看不到 Camel 能夠讀取此屬性文件。 當我在我的機器上運行多個調度程序時,它們都會執行。 所以無論如何都不會發生集群。

請幫助我們如何將quartz.properties文件設置為camel-quartz組件配置的propertiesFile?

Camel 現在有一些內置的集群功能 - 見這里

在您的特定情況下,您可以建模一條在啟動石英調度程序時占據領導地位的路線,從而防止其他節點觸發。

設置它非常簡單,您只需根據主組件語法為單例端點添加前綴: master:namespace:delegateUri

這將導致這樣的事情:

from("master:my-cluster:quartz://myGroup/myTimerName?cron=0+0/5+12-18+?+*+MON-FRI")
        .routeId("clustered")
        .log("Clustered quartz scheduler !");  

Quartz 需要一個 JDBC 作業存儲,以防您在集群中運行多個服務器。 此外,為每個服務器分配一個唯一的實例 ID 也很重要。 有關完整示例,包括 docker-compose 文件,請參閱https://medium.com/javarevisited/spring-boot-using-quartz-in-mode-cluster-e1d71e4af4b9

以下是要使用的最重要的設置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/myapp
    username: xxx
    password: xxx
  quartz:
    job-store-type: jdbc
    jdbc:
      initialize-schema: never
    properties:
      org:
        quartz:
          scheduler:
            instanceId: AUTO
          jobStore:
            class: org.quartz.impl.jdbcjobstore.JobStoreTX
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
            isClustered: true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM