나는 parallell 작업을 수행하기 위해 split에서 threadPool을 사용해야하는 camelRoute을 가지고 있습니다. 내 문제는 그 이유는 내가 스레드가 하나의 스레드와 스레드 풀 지정된 양의 스레드를 실행할 수 있기 때문에 항상 한 스레드를 너무 많이 끝납니다. 스레드 풀에 스레드 풀을 채우고 싶습니다.Apache Camel split이 ThreadPool을 사용하여 병렬로 실행되는 이유는 무엇입니까?
왜 이런 일이 발생하는지 누구나 알 수 있습니까? 경로 및 스레드 풀은 나의 낙타의 context.xml처럼 구성되어
from(FROM_ENDPOINT)
.routeId(ID)
.split(body(), new GroupedExchangeAggregationStrategy())
.executorServiceRef("ThreadPool")
.bean(bean, "beanMethod")
.end()
.bean(bean)
.multicast()
.to(TO_ENDPOINT);
(여기에서와 ID 등과 같은 코드에서 다른 값,하지만 캔트 쇼 ...) 아래 낙타 상황 ... :
<camel:camelContext id="application-context" useMDCLogging="true" xmlns="http://camel.apache.org/schema/spring">
<propertyPlaceholder id="properties" location="ref:props"/>
<routeBuilder ref="refToRoute"/>
<threadPoolProfile id="ThreadPool" maxPoolSize="2"
maxQueueSize="-1" poolSize="2"/>
</camel:camelContext>
왜 여분의 스레드가 있는지 알려줘서 고맙습니다. 하나의 스레드 풀 값을 설정 덜 생각하지만 만약 내가 1 스레드와 함께 실행하고 싶습니다? 테스트에서 우리가 스레드 풀 로그에서 수행하는 작업으로 하나의 스레드 만 사용하는 것이 유익 할 것입니다. 우리는 순서대로보고해야하며 평행 흐름은이를 따르기가 매우 어렵습니다. 유일한 해결책은 지금은 경로에서 스레드 풀을 제거하는 것입니다. – pressbyron
1 스레드의 경우 스레드 풀을 사용하지 말고 모든 스레드를 동일한 순서로 순차적으로 사용하십시오. –
그래, 이해하지만 디버깅 때문에 테스트 중에는 아니지만 프로덕션 환경에서 스레드 풀을 갖고 싶습니다. 테스트/prod에 대한 두 개의 코드베이스를 원하지 않지만 테스트에서 하나의 스레드를 사용하고 생산에서 여러 개를 사용하도록 스레드 풀을 구성하려고합니다. 그러나 이것은 불가능할 수 있습니까? – pressbyron