178.16. 유지할 수 있는 시간

동기화 된 클럭에 대해 먼저 읽으십시오.

Camel을 사용하여 JMS 를 통해 request/reply(InOut)를 수행하는 경우 Camel은 요청Timeout 옵션에서 기본적으로 20초인 발신자의 타임아웃을 사용합니다. 더 높거나 낮은 값을 설정하여 이를 제어할 수 있습니다. 그러나 실시간 값의 시간은 전송 중인 JMS 메시지에 계속 설정됩니다. 따라서 시스템 간에 클럭을 동기화해야 합니다. 그렇지 않은 경우 설정 중인 시간을 비활성화해야 할 수 있습니다. 이제 Camel 2.8 이후의 disableTimeToLive 옵션을 사용할 수 있습니다. 따라서 이 옵션을 disableTimeToLive=true 로 설정하면 Camel에서 JMS 메시지를 보낼 때 실시간 값으로 설정하지 않습니다. 그러나 요청 시간 초과는 여전히 활성 상태입니다. 따라서 예를 들어 JMS 를 통해 요청/응답하고 활성 상태가 비활성화된 경우에도 Camel은 여전히 시간 초과를 20초( 요청Timeout 옵션) 사용합니다. 이 옵션도 구성할 수 있습니다. 따라서 두 옵션 requestTimeoutdisableTimeToLive 를 사용하면 요청/응답을 수행할 때 세분화된 제어를 제공할 수 있습니다.

Camel 2.13/2.12.3 이후부터는 엔드포인트 구성된 값 대신 요청 시간 초과 값으로 재정의하고 사용할 헤더를 메시지에 제공할 수 있습니다. 예를 들면 다음과 같습니다.

   from("direct:someWhere")
     .to("jms:queue:foo?replyTo=bar&requestTimeout=30s")
     .to("bean:processReply");

위의 경로에는 30초의 요청Timeout 을 구성하는 엔드포인트가 있습니다. 따라서 Camel은 응답 메시지가 표시줄 대기열에 다시 표시될 때까지 30초 동안 기다립니다. 응답 메시지가 수신되지 않으면 org.apache.camel.ExchangeTimedOutException 이 Exchange에 설정되어 있으며 Camel은 예외로 인해 실패합니다. 그러면 Camel의 오류 처리기가 반응합니다.

메시지별 시간 초과 값을 사용하려면 org.apache.camel.component.jms.JmsConstants#JMS_REQUEST_TIMEOUT 으로 헤더를 긴 유형과 함께 상수 값 "CamelJmsRequestTimeout" 으로 설정할 수 있습니다.

예를 들어, namespace를 사용하여 다음과 같이 서비스 DestinationRule에서 "whatIsTheTimeout" 메서드를 호출하는 것과 같이 개별 메시지당 시간 초과 값을 계산할 수 있습니다.

from("direct:someWhere")
  .setHeader("CamelJmsRequestTimeout", method(ServiceBean.class, "whatIsTheTimeout"))
  .to("jms:queue:foo?replyTo=bar&requestTimeout=30s")
  .to("bean:processReply");

Camel을 사용하여 JMS 를 통해 실행 및 잊어버리면 Camel은 기본적으로 메시지에서 실시간 값으로 설정할 시간을 설정하지 않습니다. timeToLive 옵션을 사용하여 값을 구성할 수 있습니다. 예를 들어 5초를 나타내기 위해 timeToLive=5000 을 설정합니다. disableTimeToLive 옵션을 사용하여 InOnly 메시징에도 시간을 강제로 비활성화할 수 있습니다. requestTimeout 옵션은 InOnly 메시지에 사용되지 않습니다.