[JobRunr] Pro 버전에서 Server Tag 설정 방법 및 실전 노하우

이글에서 JobRunr에 대하여 간단한 사용법에 대하여 알아 보았다. 이번 글은 JobRunr Pro 버전에서 Service node에 대하여 각기 다른 tag를 설정하는 방법 및 Recurring Job를 설정 시 ProgressBar를 이용하는 방법에 대해 정리한 곳이 없어 정리하려고 한다.

◆Server Tag 기능

보통 production 환경에는 여러개의 node가 존재하고 특정 업무를 수행하는 node도 존재하기 마련이다. Tag 기능은 특정 Job를 특정 node에서만 수행 하도록 하는 기능이다. 이 기능은 pro버전에만 제공한다. JobRunr 설정에 아래 내용을 추가 해야 Tag 기능을 사용 가능하다.

@Configuration
class JobRunrConfig(
    private val mongoClient: MongoClient
) {
    @Bean
    fun storageProvider(jobMapper: JobMapper): StorageProvider {

        val storageProvider = MongoDBStorageProvider(mongoClient)
        storageProvider.setJobMapper(jobMapper)
        return storageProvider
    }

    @Bean
    fun backgroundJobServer(
        storageProvider: StorageProvider,
        @Qualifier("jobRunrJsonMapper") jsonMapper: JsonMapper,
        jobActivator: JobActivator
    ): BackgroundJobServer {

        val backgroundJobServer = BackgroundJobServer(
            storageProvider, jsonMapper, jobActivator,
            BackgroundJobServerConfiguration
                .usingStandardBackgroundJobServerConfiguration()
                .andTags("Windows"),
            JobNotFoundConfiguration.usingStandardJobNotFoundConfiguration()
        )
        backgroundJobServer.start()

        return backgroundJobServer
    }
}

backgroundJobServer에 대한 설정을 해 줘야 된다. 여기서는 모든 parameter 값은 기본 값을 사용했고 tag만 별도로 설정해 주었다.

◆ Tag 사용

JobRunr 함수 정의 시 Tag 정보도 같이 적어 준다.

@Recurring(id = "Myjob-window", cron = "8 8 12 * * *")
@Job(name = "MyJob", runOnServerWithTag = "Windows", retries = 2)
public void myJob() throws Exception {
     log.info("My job start.");
}

◆ Recurring Job에서 Progress Bar 사용

Progress Bar 기능은 JobRunr에서 기본적으로 제공하는 DashBoard 기능 중 하나이다. Progress Bar를 사용하려면 JobContext를 인자로 받아야 사용가능하다. 그런데 Recurring Job를 정의하면 인자로 아무것도 받지 못한다. 이를 해결 하기 위해서 Recrring Job 정의서의 Background Job를 enqueue하는 방식으로 우회하여 해결이 가능 하다.

@Recurring(id = "Myjob-window", cron = "8 8 12 * * *")
@Job(name = "MyJob", runOnServerWithTag = "Windows", retries = 2)
public void myJob() throws Exception {
     log.info("My job start.");
}

@Job(name = "MyJob-enqueue", runOnServerWithTag = "Windows", retries = 2)
public Boolean MyRealJob(JobContext jobContext) throws Exception {
        JobDashboardProgressBar progressBar = jobContext.progressBar(1000);
        for(int i = 0; i < 1000; i++) {
            progressBar.increaseByOne();
     }
}

◆DashBoard에서 log 보기

기본적으로 제공하는 Dashboard에서는 log 정보도 담을 수 있다. 설정은 아래와 같이 하고 사용하면 된다.

//정의
private Logger log =new JobRunrDashboardLogger(LoggerFactory.getLogger(MyService.class))

//사용
log.info("My Job");

'JAVA' 카테고리의 다른 글

[JVM] Garbage Collection  (0) 2021.12.10
JAVA에 대하여(1)  (0) 2021.12.08