2016-08-09 2 views
5

JMS 대기열이 있습니다. 메시지를받은 후 DB에 저장해야합니다. 그런 다음 일부 조건에 따라 고정 된 속도로 제 3 자 서비스에이 메시지를 보내려면 제한을 사용합니다.Apache Camel. 스로틀 루트 부분

from("jms:queue") 
      .bean(persistingListener) 
      .choice() 
       .when(some condition ..) 
        .throttle(5) 
        .asyncDelayed() 
        .bean(thirdPartyServiceClient) 
      .endChoice(); 

그러나, 전체 경로가 스로틀 도착하지 타사 서비스 클라이언트와 관련된 부분 :

나는 다음과 같은 경로를 가지고있다. 큐에 100 개의 메시지를 넣으면 처음 5 개만 읽혀집니다. 따라서이 경우 타사 서비스가 필요하지 않은 메시지 처리가 지연됩니다.

제 3 자 서비스와 관련된 부분에서만 조절 방법에 대한 아이디어가 있습니까?

미리 감사드립니다.

+0

기회가 당신의 상태가 항상 참임을 있습니까? 시간 창도 지정해야합니다. – alobodzk

+0

@alobodzk, 음, 그런 기회는 없으며 중요하지 않다고 생각합니다. 기본적으로 스로틀 시간 창은 1 초로 설정됩니다. – StasKolodyuk

+0

JMS 엔드 포인트에서 asyncConsumer = true를 설정하십시오. 해당 설명서를 참조하십시오. http://camel.apache.org/jms –

답변

2

JMS 엔드 포인트는 기본적으로 각 JMS 메시지가 순서대로 처리되는 모드로 실행됩니다. 비동기 처리로 인해 메시지가 비정상적으로 처리되도록하려면 엔드 포인트에서 asyncConsumer=true을 구성하여이 설명을 사용해야합니다.

는 JMS 문서에서 자세한 내용을 참조하십시오 http://camel.apache.org/jms