2017-12-29 44 views
0

일부 데이터 프로세서를 만드는 중입니다. 그것은 다음 API 메소드를 가지고 있습니다 : 어떤 태스크를 생성하고, 태스크 결과를 얻습니다.Java : 여러 인스턴스에서 동일한 작업 생성 방지

데이터 프로세서가 실패한 경우 복구해야하며 여러 인스턴스에서 실행할 수 있어야합니다. (DP1, DP2 등).

상태를 Redis db에 저장합니다. 예 :

API는 작업 (Runnable)을 만들고 scheduledThreadPoolExecutor에 넣은 다음 5 초마다 실행하여 Redis 상태를 수정합니다. 작업 결과를 얻으면 작업이 취소되고 Redis 상태가 지워집니다.

DataProcessor가 실패하고 다시 시작되면 Redis 데이터베이스에서 상태를 가져 와서 작업을 다시 만들고 모든 것이 정상입니다.

다른 DataProcessor 인스턴스가 실행되면 Redis에서 상태를 가져 와서 작업을 다시 만들고 실행합니다. 이러한 작업은 다른 DataProcessor 인스턴스에서 이미 처리되었으므로 바람직하지 않습니다.

실패 할 경우이 인스턴스는 [잘 처리되지 않음]으로 표시 할 수 없습니다. 실패했음을 알리는 인스턴스가 더 이상 실패 했으므로 더 이상 수행 할 수 없습니다.

이 상황에서 수행 할 수있는 작업은 무엇입니까?

답변

0

발견 된 "Redisson"라이브러리에는 분산 형 스케줄러가 있습니다.