2016-10-20 1 views
0

두 개의 애플리케이션 노드에서 Quartz 스케쥴러 러너를 클러스터링했습니다. 응용 프로그램 노드를 업데이트해야하며 가용성이 높은 이유로 롤링 업데이트로 업데이트가 수행됩니다.클러스터의 롤링 업데이트 중에 실행을 시작해야하는 Quartz 클러스터에 새 작업을 추가하는 방법은 무엇입니까?

업데이트와 함께 새로운 작업을 추가해야하며 해당 작업을 즉시 시작해야합니다. 즉, 모든 노드가 업데이트 될 때까지 기다릴 수 없습니다. 문제는 내가 can't control which node will run the new job이고 이전 노드 중 하나가 작업을 실행하면 작업 인스턴스화가 (ClassNotFoundException을 사용하여) 수행되고 trigger will be set to the state ERROR이되고 작업이 다시 실행되지 않습니다.

이 문제에 대한 한 가지 해결책은 두 노드를 업데이트하는 것입니다. 하나는 모든 노드에 클래스를 추가하고 다른 하나는 트리거를 추가하는 것입니다. 이 방법에 대한 주된 이유는 우리의 수술 절차가 이것을지지하지 않는다는 것입니다.

새 작업을 예약하고 단일 업데이트로 안정적으로 실행할 수있는 방법이 있습니까?

답변

1

방금 ​​시도한 결과 방아쇠를 획득하는 동안 Quartz가 ClassCastException을 얻는 것으로 나타났습니다. 예외는 JobPersistenceException에 랩되어있어 방아쇠는 대기 상태가됩니다.

이렇게하면 이전 노드 중 하나에서 오류 로그 항목이 발생할 수 있지만 Quartz는 트리거를 작동하지 않는 상태로 두지 않습니다.