새로운 Quartz 작업과 트리거를 생성해야 합니까, 아니면 하나의 작업과 여러 트리거를 생성해야 합니까?

StackOverflow https://stackoverflow.com/questions/264191

문제

이메일 예약을 위해 Quartz를 사용하려고 하는데 어떤 접근 방식을 취해야 할지 잘 모르겠습니다.

  1. 새 작업을 생성하고 이메일이 예약될 때마다 트리거합니다. 또는
  2. 단일 작업을 만들고 이메일이 예약될 때마다 새 트리거를 만듭니다.

어느 쪽이든 메시지/수신자 등을 전달해야 하며, 수천 개의 이메일이 예정되어 있을 가능성이 높기 때문에 많은 작업을 생성하면 상당한 메모리 오버헤드가 추가되기 시작할지 확실하지 않습니다.

업데이트:이러한 이메일은 제가 아닌 사용자에 의해 예약됩니다. 따라서 런타임에 프로그래밍 방식으로 추가할 예정이며 특정 시간에 발송되도록 예약되지 않습니다.

도움이 되었습니까?

해결책

Quartz는 수만 개의 트리거를 처리하도록 설계되었습니다.여기서 확장성의 주요 제한은 JobStore에서 사용 가능한 공간입니다.합리적인 데이터베이스로 뒷받침되는 JDBCJobStore는 수십만 개의 트리거를 처리할 수 있어야 합니다.

트리거의 작업 데이터 맵을 통해 단일 작업을 매개변수화할 수 있는 경우 각 이메일에 대해 단일 작업과 하나의 트리거를 생성하십시오.Quartz는 실행 준비가 된 트리거를 찾기 위해 정기적으로 작업 저장소를 폴링합니다.Quartz는 이 쿼리의 임의의 큰 결과 집합을 안전하게 처리하도록 설계되었습니다.

중요한 것은(그리고 실제로 Quartz 자체와는 아무 관련이 없음) 피크 로드를 실행하는 데 필요한 대역폭이 있다는 것입니다.사용자가 메일을 한꺼번에 예약하는 경향이 있는 경우 이메일을 발송할 수 있는 컴퓨팅 리소스가 있는지 확인해야 합니다.여기에는 네트워크 대역폭, 처리 및 사용 가능한 리소스를 활용하도록 구성된 충분한 작업자 스레드가 포함됩니다.

작업 실행이 너무 뒤처지는 경우 Quartz가 트리거로 수행해야 할 작업을 구성할 수 있습니다.계속 시도하거나 트리거를 건너뛰는 등의 작업을 수행할 수 있습니다.

다른 팁

트리거가 시간 일정을 기준으로해야합니까? 당신은 a를 사용할 수 있습니다 크론 트리거 개별 트리거보다는보다 복잡한 시간 기반 일정을 설정합니다.

일련의 이메일 세트를 대기열하거나 그룹화하는 것을 고려하고 '배치'를 관리하는 단일 또는 몇 가지 주기적 (또는 예정된) 작업을 가질 수 있습니다.

Quartz 작업자가 소비하고 보낼 수 있도록 Quartz 작업 대기열을 대기 할 수도 있습니다.

나는 수천 개의 석영 작업/트리거를 권장하지 않을 것입니다.


편집 : 아래 의견에 대한 응답으로 :

동일한 JVM에서 응용 프로그램을 실행하는 프레임 워크의 일부로 사용될 때 수천 개의 쿼츠 작업/트리거를 권장하지 않으므로 작업/트리거는 나머지 응용 프로그램과 리소스를 놓고 경쟁합니다.

하나의 직업과 하나의 방아쇠를 추천합니다. 이메일 요청을 데이터베이스 테이블에 넣고 Quartz 작업에 새 이메일을 보낼 수 있도록하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top