2013-05-01 1 views
2

다른 프로세스의 결과를 반환하는 Camel 프록시를 사용하고 있습니다.Camel JMS 프록시 제한 시간이 20000 밀리가 응답 메시지를 기다린 후 발생했습니다.

public interface DataProcessingInterface { 
    public List<ResponseData> processPreview(ClientData criteria, Config config); 
} 

그리고이 구성되어 연결이

<camel:proxy 
id="processPreviewProxy" 
serviceInterface="model.jms.DataProcessingInterface" 
serviceUrl="jms:queue:processPreview"/> 

하지만 가끔은 다른 프로세스가 결과를 반환하는 데 시간이 오래 걸리고 나는

TemporaryQueueReplyManager - Timeout occurred after 20000 millis waiting for reply message with correlationID [Camel-ID-PC01-2661-1367403764103-0-15]. Setting ExchangeTimedOutException on (MessageId: ID-PC01-2661-1367403764103-0-17 on ExchangeId: ID-PC01-2661-1367403764103-0-16) and continue routing. 

가 어떻게 시간 제한 예외를 얻는 데 나는 응답이 준비 될 때까지 카멜에게 기다려달라고 말한다. 시간이 얼마나 걸릴지는 오래 걸릴 것입니다. 클라이언트는 다른 스레드에서 관리되므로 소요 시간이 클라이언트에 영향을 미치지 않습니다.

또한 계속 기다릴 수 있도록 TimeoutException이 throw되면 연결을 재설정 할 수 있습니까?

답변

2

"Forever"? 영원히 기다릴 수 없어요.

일반적으로 A (동기식) 요청/응답에는 이유에 의해 설정된 시간 초과 값이 있습니다. 주어진 시간 내에 회신을받지 못하면 다시 시도하거나 건너 뜁니다. JMS의 경우 requestTimeout과 timeToLive를 설정하여이를 달성합니다. this 섹션을 읽으십시오. Camel에서는 재 전달 및 오류 처리기를 사용하여 이러한 작업을 수행 할 수 있습니다.

어쨌든 값을 "Forever"(또는 적어도 매우 긴 시간 (예 : 여러 시간))로 설정하면 서버/응용 프로그램을 다시 시작하면 요청이 실패하게됩니다.

+0

의견을 보내 주셔서 감사합니다. 나는 "영원히" "좋은 전략이 아니다"라고 생각한다. ExceptionHandler와 시간 제한을 결합하여 요청을 다시 시도합니다. 영원히 기다리는 것보다 훨씬 더 똑똑합니다. tx –

+1

+1 "서버/응용 프로그램 재시작으로도 요청이 실패하게됩니다." – techuser

1

jms 엔드 포인트에서 매우 높은 요청 시간 초과를 설정할 수 있습니다.

jms:queue:processPreview?requestTimeout=xxxx 
+0

많은 요청 시간 초과가 거의 발생하지 않습니다. –

관련 문제