나는 "EJB
"을 호출하고 4 Asynchronous
EJB
을 호출하며 모두 실행하는데 5 초를 제공해야합니다. 5 초 후 "클라이언트"EJB는 완료된 Future
오브젝트에서 준비 결과를 수집하고 출력을 리턴합니다.비동기 EJB에 대해 최대 X 초 대기
클라이언트 부분에서 "대기 중"문제가 있습니다. 나는 시도했다 future.get(5, TimeUnit.MILLISECONDS)
때로는 비동기 같아 보인다 EJB
시간 초과 후 실행을 시작합니다. 올바른 방법이 있습니까?
1) Map
에 Future
개체를 수집
Map<String, Future> futureMap = new HashMap<String, Future>();
for (String userID: users) {
Future<Set<FrontPageData>> test = util.asyncGetData(userID);
futureMap.put(serviceID, test);
}
return futureMap;
2) 그럼 난 Future
객체
final long now = Calendar.getInstance().getTimeInMillis();
final long end = now + TimeUnit.SECONDS.toMillis(5)
Map<String, Object> output = new HashMap<String, Object>();
Object data;
for (String userID: futureMap.keySet()) {
Future future= futureMap.get(userID);
try {
//check how much time left till the end
long timeout = end - Calendar.getInstance().getTimeInMillis();
data = future.get(timeout, TimeUnit.MILLISECONDS);
output.put(userID, data);
} catch (Exception e) {//write to logs
}
}
return output;
}
에서 타임 아웃 출력을 얻을 당신에게
내 고객은 장기간의 처형을 기다리고 싶지 않습니다. 그렇다고해서 실행을 시작하지 않은 서비스를 기다리지 않아도된다는 의미는 아닙니다. – lili
future.get (timeout)을 호출하고 시간 초과 부분을 기다립니다. 다음 시간에 제한 시간을 계산하면 더 적은 시간이 걸릴 것입니다. (실행 시간이 얼마 남았는지 확인하십시오.) – lili
> 실행 시간이 얼마 남았는지 확인하십시오. - 바보 같아요, 바보 같아요. –