178.16. 자주 묻는 질문

동기화된 시계에 대해 위의 첫 번째 내용을 읽습니다.

Camel을 사용하여 JMS를 통해 JMS 에 요청/축소(InOut)하는 경우 Camel은 requestTimeout 옵션에서 기본적으로 20초인 발신자 측에서 타임아웃을 사용합니다. 이는 더 높거나 낮은 값을 설정하여 제어할 수 있습니다. 그러나 라이브 값으로의 시간은 여전히 전송 중인 JMS 메시지에 설정되어 있습니다. 따라서 시스템 간에 클럭을 동기화해야 합니다. 그렇지 않은 경우 설정되는 라이브 값의 시간을 비활성화 할 수 있습니다. 이제 Camel 2.8disableTimeToLive 옵션을 사용할 수 있습니다. 따라서 이 옵션을 disableTimeToLive=true 로 설정하면 Camel에서 JMS 메시지를 보낼 때 시간을 라이브 값으로 설정하지 않습니다. 그러 나 요청 시간 초과는 여전히 활성 상태입니다. 예를 들어 JMS 를 통해 요청/reply over를 수행하고 활성 시간을 비활성화한 경우 Camel은 여전히 타임아웃을 20초( requestTimeout 옵션)으로 사용합니다. 이 옵션도 구성할 수 있습니다. 따라서 두 가지 옵션 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초 동안 기다립니다. 응답 메시지가 수신되지 않으면 Exchange에 org.apache.camel.ExchangeTimedOutException 이 설정되어 있으며 Camel은 예외로 인해 오류가 발생하고 Camel의 오류 처리기가 반응합니다.

메시지 제한 시간 값을 사용하려는 경우 키 org.apache.camel.component.jms.jms.jmsConstants#JMS_REQUEST_TIMEOUT 을 사용하여 헤더를 설정할 수 있습니다. 이 헤더에는 시간 초과 값이 "CamelJmsRequestTimeout" 으로 표시됩니다.

예를 들어 빈을 사용하여 다음과 같이 서비스 빈에서 "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 메시징을 위해 라이브 시간을 강제로 비활성화할 수 있습니다. InOnly 메시징에는 requestTimeout 옵션이 사용되지 않습니다.