2010-08-02 5 views
4

데이터베이스 프로세스 (여러 쿼리를 실행하고 두 개의 큰 테이블간에 데이터를 이동하는 SQL 코드)를 실행하는 웹 서비스를 구축 중이지만 일부 프로세스가 실행하려면 2 ~ 10 시간이 걸립니다.웹 서비스에서 장기 실행 프로세스를위한 Java 패턴

Java 웹 서비스 (실제로 JAX-RS와 Spring을 사용하여 REST 기반)에서 장기 실행 데이터베이스 프로세스를 실행하는 모범 사례는 무엇입니까? 프로세스는 1 웹 서비스 호출시 실행됩니다. 이 실행은 일주일에 한 번 수행 될 것으로 예상됩니다.

미리 감사드립니다.

답변

6

비동기가 있어야합니다.

웹 서비스 호출이 RPC이므로 구현에서 요청의 유효성을 검사하고 처리를 위해 대기열에 넣고 토큰 또는 URL이있는 응답을 즉시 보내 진행 상태를 확인하십시오.

JMS 대기열을 설정하고 대기열에서 메시지를 가져 와서 지속시키는 수신기를 등록하십시오.

실제로이 시간이 2-10 시간이면 스키마와 쿼리를보고 속도를 높일 수 있는지 확인하는 것이 좋습니다. 어딘가에 누락 된 색인이 있습니다.

+0

감사합니다. 나는 이것을 구현하기 위해 지금 ActiveMQ를 배우고있다. 또 하나의 질문은, 내가 pub/sub (주제) 나 큐를 사용할 상황입니까? 이 맥락에서 각자의 장단점은 무엇입니까? – wsb3383

+0

@duffymo : 토큰이나 URL을 사용하여 진행 상황을 확인하는 방법에 대한 아이디어가 있습니까? – Diluu

+0

폴링 ("지금 완료 했습니까?") 또는 이벤트 및 콜백을 사용할 수 있습니다. – duffymo

1

나는 현재이 정확한 상황에 대해 다른 전략을 평가 중이며 시간 만 다릅니다.

상태로 게시/게시 메시지 대기열 (ActiveMQ)을 사용하면 더 나은 서비스를 제공받을 수 있습니다.

+0

큐, 서브가 큐잉보다 선호되는 접근 방식이라고 생각하는 이유는 무엇입니까? – wsb3383

+0

문제는 "이 웹 서비스를 서버에서 어떻게 비동기로 만들 수 있습니까?" 그것을위한 몇 가지 해결책이 있습니다 (Metro WS 스택은 약간의 지원이 있습니다). 그러나, 내가 본 것 중에, 그들은 실제로 접근법에서 모두 친숙하지 않습니다. Pub/Sub 메시지 대기열은 이와 같은 상황을 위해 작성되었으며 "작업에 적합한 도구 사용"이라는 말처럼 진행됩니다. 슬프게도, 내 작업 프로젝트를 위해 Pub/Sub 메시지 대기열을 사용하지 않기로 결정했습니다. –

관련 문제