7

나는 대기열 채널과 그 대기열에서 읽는 폴러를 가진 서비스 활성화자를 가지고 있습니다. 나는 "이 스레드에서 50 개의 스레드가 대기열을 폴링하도록하고, 메시지를 다시 가져 와서이 스레드에서 서비스 활성화 기가 가리키는 서비스를 호출 할 때마다"라고 말하도록 구성하고 싶습니다.스프링 통합 - 동시 서비스 활성화 자

서비스에는 @Async 주석이 없지만 상태에 관계없이 안전한 동시에 동시 실행이 가능합니다.

아래 내용을 준수합니까? 이것을 달성하는 다른 선호되는 방법이 있습니까?

<int:channel id="titles"> 
    <int:queue/> 
</int:channel> 

<int:service-activator output-channel="resolvedIds" ref="searchService" method="searchOnTitle" input-channel="titles"> 
    <int:poller fixed-delay="100" time-unit="MILLISECONDS" task-executor="taskExecutor"></int:poller> 
</int:service-activator> 

<task:executor id="taskExecutor" pool-size="50" keep-alive="120" /> 

답변

8

예 나는 원하는대로한다고 생각합니다. QueueChannel을 도입하면 상호 작용이 비동기가되어 @Async가 필요하지 않습니다. 명시 적으로 폴러를 설정하지 않으면 기본 폴러가 사용됩니다.

개요를 달성 한 가장 좋은 방법은 개요입니다. 대기열 크기에 제한을 두는 것도 고려해 볼 수 있습니다. 따라서 생산자와 계속 지체 할 경우 지연 문제가 발생하여 메모리 부족 문제가 발생하지 않도록하십시오. 크기가 지정되면 채널의 송신 통화가 차단되어 스로틀로 작동합니다.

구성은 예상대로 작동합니다. 유일한 문제는 각 엔드 포인트에 대해 실행 프로그램과 폴러를 작성하기 시작하면 전체 애플리케이션에 대한 최적의 구성을 파악하기가 어려워집니다. 몇 가지 특정 단계에 대해 이러한 종류의 최적화를 수행하는 것이 좋지만 모든 끝점에 대한 최적화는 아닙니다. 질문에 포함 된 내용 중 아무 것도 수행하지 않는다고 제안합니다. 어쨌든 내가 모으겠다고 생각했습니다.