[SPRING] dropwizard에서 비동기 작업 실행 및 상태 폴링
SPRINGdropwizard에서 비동기 작업 실행 및 상태 폴링
dropwizard에서 비동기 작업을 구현하고 상태를 폴링해야합니다. 이 자원에 대한 2 종점이 있습니다.
@Path("/jobs")
@Component
public class MyController {
@POST
@Produces(MediaType.APPLICATION_JSON)
public String startJob(@Valid MyRequest request) {
return 1111;
}
@GET
@Path("/{jobId}")
@Produces(MediaType.APPLICATION_JSON)
public JobStatus getJobStatus(@PathParam("id") String jobId) {
return JobStatus.READY;
}
}
나는 일자리를 시작하기 위해 석영을 사용하는 것을 고려하고 있지만 단 한 번만 반복하고 반복하지는 않습니다. 상태를 요청할 때 트리거 상태가 나타납니다. 그러나 일정이 잡히지 않은 사용을 위해 쿼츠를 사용한다는 생각은 이상하게 보입니다. 이것에 대한 더 좋은 접근법이 있습니까? 어쩌면 dropwizard가 더 나은 도구를 제공할까요? 모든 조언을 appriciate 것입니다.
업데이트 : 나는 또한 https://github.com/gresrun/jesque를보고 있지만 실행중인 작업의 상태를 폴링하는 방법을 찾을 수 없습니다.
해결법
-
==============================
1.Managed 인터페이스를 사용할 수 있습니다. 아래의 스 니펫에서는 작업을 실행하기 위해 ScheduledExecutorService를 사용하지만 원하는 경우 Quartz를 대신 사용할 수 있습니다. 나는 더 쉽고 간단하므로 ScheduledExecutorService로 작업하는 것을 선호한다 ...
Managed 인터페이스를 사용할 수 있습니다. 아래의 스 니펫에서는 작업을 실행하기 위해 ScheduledExecutorService를 사용하지만 원하는 경우 Quartz를 대신 사용할 수 있습니다. 나는 더 쉽고 간단하므로 ScheduledExecutorService로 작업하는 것을 선호한다 ...
첫 번째 단계는 관리 서비스를 등록하는 것입니다.
environment.lifecycle().manage(new JobExecutionService());
두 번째 단계는 그것을 작성하는 것입니다.
/** * A wrapper around the ScheduledExecutorService so all jobs can start when the server starts, and * automatically shutdown when the server stops. * @author Nasir Rasul {@literal nasir@rasul.ca} */ public class JobExecutionService implements Managed { private final ScheduledExecutorService service = Executors.newScheduledThreadPool(2); @Override public void start() throws Exception { System.out.println("Starting jobs"); service.scheduleAtFixedRate(new HelloWorldJob(), 1, 1, TimeUnit.SECONDS); } @Override public void stop() throws Exception { System.out.println("Shutting down"); service.shutdown(); } }
그리고 그 일 자체
/** * A very simple job which just prints the current time in millisecods * @author Nasir Rasul {@literal nasir@rasul.ca} */ public class HelloWorldJob implements Runnable { /** * When an object implementing interface <code>Runnable</code> is used * to create a thread, starting the thread causes the object's * <code>run</code> method to be called in that separately executing * thread. * <p> * The general contract of the method <code>run</code> is that it may * take any action whatsoever. * * @see Thread#run() */ @Override public void run() { System.out.println(System.currentTimeMillis()); } }
아래의 주석에서 언급했듯이 Runnable을 사용한다면 Thread.getState ()를 사용할 수 있습니다. Java에서 현재 실행중인 모든 스레드 목록 가져 오기를 참조하십시오. 신청서 작성 방법에 따라 중간 중간 조각이 필요할 수도 있습니다.
from https://stackoverflow.com/questions/34653177/running-async-jobs-in-dropwizard-and-polling-their-status by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 동적 데이터 소스 라우팅 (0) | 2019.04.14 |
---|---|
[SPRING] Spring 배치 관리자에서 외부 설정 파일로드 (0) | 2019.04.14 |
[SPRING] Spring 데이터 나머지 - _embedded에 중첩 된 리소스 포함 (0) | 2019.04.14 |
[SPRING] Spring MVC에서 PUT 요청 (0) | 2019.04.14 |
[SPRING] JSF와 Spring의 통합 (0) | 2019.04.14 |