복붙노트

[SPRING] Quartz Scheduler : 모든 클러스터 노드에서 일부 작업을 트리거하고 클러스터마다 한 번만 트리거합니다.

SPRING

Quartz Scheduler : 모든 클러스터 노드에서 일부 작업을 트리거하고 클러스터마다 한 번만 트리거합니다.

쿼츠 스케줄러를 클러스터 환경에서 Spring 빈으로 사용하고 있습니다.

@ NotConcurrent 주석이 달린 작업이 몇 개 있으며 클러스터 당 한 번 (즉 한 노드에서만 한 스레드에서만) 실행됩니다.

이제 클러스터의 모든 노드에서 하나의 작업을 실행해야합니다. @NotConcurrent 주석을 제거했지만 한 컴퓨터의 모든 스레드에서만 실행됩니다. 다른 노드에서 해고 당하지 않습니다.

작업에 주석을 달려면 어떻게해야합니까?

예 : Job1 주석이 달린 NotConcurrent가 자정에 스케쥴 됨 => 자정마다 한 대의 기계에서만 실행됩니다. 자정에 주석이 달린 Job2 => 자정마다 모든 머신에서 실행됩니다.

고맙습니다.

해결법

  1. ==============================

    1.AFAIK Quartz 작업은 Quartz가 선택한 단일 노드에서 항상 실행된다. @NonConcurrent 어노테이션은 Quartz가 특정 노드에서 동시에 같은 작업을 수행하는 것을 방지한다.

    AFAIK Quartz 작업은 Quartz가 선택한 단일 노드에서 항상 실행된다. @NonConcurrent 어노테이션은 Quartz가 특정 노드에서 동시에 같은 작업을 수행하는 것을 방지한다.

    즉, Quartz가 여러 노드에서 동시에 작업을 실행하도록 만들 수 없습니다. 작업을 실행하기 위해 항상 하나의 노드를 선택합니다.

    설명하는 것을 실현하려면 동일한 작업 클래스를 사용하고 연관된 트리거없이 여러 작업이 필요할 수 있습니다. 그런 다음 원격으로 연결하는 일종의 오케스트레이터 작업을 구현해야합니다. JMX 또는 RMI를 통해 개별 노드로 이동하고 수동으로 작업을 트리거합니다.

    QuartzDesk (www.quartzdesk.com)에서 Quartz 스케쥴러 인스턴스에 연결할 수있는 단일 종단점을 제공하는 웹 서비스를 제공하고이를 통해 작업을 트리거 할 수있다.

  2. from https://stackoverflow.com/questions/23665688/quartz-scheduler-trigger-some-jobs-on-every-cluster-node-and-some-only-once-per by cc-by-sa and MIT license