2009-09-24 5 views
1

사용자가 외부 리소스에 요청을 트리거 할 수있게 해주는 웹 응용 프로그램이 있습니다. 외부 리소스는 결과를 수집하기 위해 불특정 시간을 소비하므로 업데이트를 얻기 위해 폴링해야하고 완료 될 때 최종 결과를 수집해야합니다.소비자 풀의 자동 확장

사용자가 요청을 트리거하면 요청이 대기열에 추가되고 사용자가 다른 작업을 수행하는 동안 여러 요청자가 각 요청을 받아 폴링합니다.

요청이 많은 날이 많기 때문에 느린 시간에 아무 일도하지 않는 직원이 많은 것은 자원 낭비가 될 수 있다고 생각하지만 동시에 처리하기에 충분한 인력이 필요합니다. 시스템의 최대 부하.

대기중인 요청이 많을 때 더 많은 근로자를 추가 할 수있는 것은 있지만 대기 시간이 거의없는 경우 직원을 죽일 수있는 것이 좋습니다.

EJB를 사용하여이 작업을 수행 할 수 있지만이를 사용하고 싶지는 않습니다. 우리는 이미 JMS 나 다른 대규모 프레임 워크를 사용하여 이것을 처리하고 싶지 않다. (Spring, Quartz, 많은 아파치와 같은 것들).

EJB가이를 지원하고 거기에있는 유용한 기능 중 하나이기 때문에 누군가가 이미 우리를 위해이 문제를 해결했다고 상상합니다. 제안?

답변

1

: 그들은이 KeepAliveTime (이상 사용하지 않은 경우 풀은 현재보다 더 corePoolSize를 스레드가 초과 스레드가 종료 될 경우

참조 getKeepAliveTime (java.util.concurrent.TimeUnit을)). 이는 풀이 활발하게 사용되지 않을 때 자원 소비를 줄이는 방법을 제공합니다. 나중에 풀이 활성화되면 새 스레드가 생성됩니다.

그래서, 자바 표준 라이브러리를 먼저 사용해보십시오. 매개 변수를 조금 조정해야하지만 스레드 풀은 그대로 구성 할 수 있습니다.