복붙노트

[SPRING] 기본으로 돌아 가기 : Apache Camel 경로 및 직접 구성 요소

SPRING

기본으로 돌아 가기 : Apache Camel 경로 및 직접 구성 요소

나는 낙타 경로와 그 두 끝점 인 Direct와 Seda에 대해 약간 혼란 스럽습니다. 다음과 같은 경로가 있다고 가정 해 봅시다.

public void configure()
{
 from("direct:services")
  .process(//Some processing here)
  .to("http://ThirdPartyServers")
}

이 외에도 몇 가지 요청을 받고 일부 처리를 수행 한 다음 메시지를이 경로로 전달하여 일부 타사 서버에서 응답을 얻는 나머지 웹 서비스가 있습니다. 다음과 같이 Spring 프레임 워크를 통해 Camel Context를 인스턴스화했습니다.

<camelContext id="appCamelContext" xmlns="http://camel.apache.org/schema/spring"
        trace="true" streamCache="true">
        <propertyPlaceholder id="properties"
            location="classpath:camel.properties" />
        <camel:routeBuilder ref="oneRouteBuilder" />
        <camel:routeBuilder ref="photosRouteBuilder" />
</camelContext>

이제 문제는 즉시이 경로에 여러 개의 다른 메시지를 보냅니다. 이제 Camel 문서에는 직접 구성 요소가 단일 스레드에서 호출되고 동기식이라고 말합니다. 모든 메시지가 동시에 처리됩니까? 아니면 한 번에 하나씩 처리됩니까?

또한 직접 구성 요소를 seda로 변경하면 차이가 있습니까?

티아

[Peter의 답변 이후] 업데이트 :  Petter의 대답은 명확하지만 동일한 Direct 및 Seda 구성 요소에 대해 새로운 의혹이 있습니다. 내 경로는 이제 다음과 같습니다.

public void configure(){
from("direct:services")
 .choice()
 .when("some predicate here-Predicate1")
 .to("seda:predicate1")
 .otherwise()
 .to("seda:fallback")
 .end();

 from("seda:predicate1")
 .process("some processing")
 .to("http://ThirdPartyServers");

 from("seda:fallback")
 .process("some processing")
 .to("jms:fallbackqueue");
}

이제 다른 스레드에서 구성 요소로 직접 5 개의 메시지를 보내면 이러한 메시지가 동시에 처리됩니다. 위의 경로에서 볼 수 있듯이 직접 구성 요소는 메시지를 seda 구성 요소로 보냅니다. 이제 서로 다른 5 개의 메시지를 모두 처리하는 하나의 seda 구성 요소 스레드 만 있습니까? 결국 모든 메시지가 하나씩 처리됩니다.

해결법

  1. ==============================

    1.직접 구성 요소는 호출자의 스레드에서 실행됩니다. 단순화 된 것은 일반적인 Java 메소드 호출입니다. 여러 스레드가 직접 엔드 포인트를 호출하는 한 여러 메시지가 경로를 통해 실행될 수 있습니다.

    직접 구성 요소는 호출자의 스레드에서 실행됩니다. 단순화 된 것은 일반적인 Java 메소드 호출입니다. 여러 스레드가 직접 엔드 포인트를 호출하는 한 여러 메시지가 경로를 통해 실행될 수 있습니다.

    SEDA (또는 VM) 엔드 포인트를 호출 할 때 메시지가 큐 (메모리)에 놓입니다. 라우트의 다른 스레드는 큐에서 메시지를 하나씩 선택하여 처리합니다. synchronizeConsumers 옵션을 설정하여 seda 소비자가 보유해야하는 스레드 수를 구성 할 수 있습니다. 기본적으로 하나의 스레드 소비 메시지는이 라우트에 생성되는 스레드 수에 관계없이 한 번에 하나의 메시지 만 처리되도록합니다.

    그것은 당신의 진술로 귀결됩니다.

    이것이 다른 스레드를 의미하거나 시퀀스의 단일 스레드에서만

  2. from https://stackoverflow.com/questions/16331886/back-to-basics-apache-camel-routes-and-direct-component by cc-by-sa and MIT license