[SPRING] 어떻게 봄 통합에서 병렬 및 동 기적으로 처리 하는가?
SPRING어떻게 봄 통합에서 병렬 및 동 기적으로 처리 하는가?
Spring 통합에서 스레드를 가진 자신의 코드를 생성하지 않고 (즉, ExecutorService가 작업자를 실행 및 제출) 작업자를 제출하지 않고 채널을 동기식 상태로 유지 (메시지 전송 후 승인 확인)하면서 동시에 더 많은 메시지를 처리 (병렬 처리) 할 수 있습니까? ? FTP를 통해 파일을 업로드하고 싶지만 코드에 자체 스레드를 만들지 않고 동시에 더 많은 파일을 업로드하고 싶습니다. 모든 파일이 업로드 될 때를 알아야합니다. (동기식이기를 바랍니다.) 스프링 통합 구성을 통해 가능합니까? 그렇다면 어떻게해야합니까?
해결법
-
==============================
1.음, 다음과 같은 흐름이 필요해 보입니다.
음, 다음과 같은 흐름이 필요해 보입니다.
뭔가 명확하지 않은 경우 알려주세요.
최신 정보
이 같은:
@Configuration @EnableIntegration @IntegrationComponentScan public class Configuration { @Bean public IntegrationFlow uploadFiles() { return f -> f.split() .handle(Ftp.outboundGateway(this.ftpSessionFactory, AbstractRemoteFileOutboundGateway.Command.PUT, "'remoteDirectory'")) .aggregate(); } } @MessagingGateway(defaultRequestChannel = "uploadFiles.input") interface FtpUploadGateway { List<String> upload(List<File> filesToUpload); }
-
==============================
2.이것은 @Async 작업 처리를 사용하여 Spring에서 매우 가능합니다.
이것은 @Async 작업 처리를 사용하여 Spring에서 매우 가능합니다.
먼저 비동기 적으로 작업을 수행 할 서비스를 만듭니다. 여기서 비동기 실행을 위해 spring으로 스캔되고 표시되는 performTask 메소드에서 @Async 주석을 기록합니다.
import java.util.concurrent.Future; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.stereotype.Service; @Service public class AsyncTask { @Async public Future<Result> performTask(String someArgument) { // put the business logic here and collect the result below Result result = new Result(); // this is some custom bean holding your result return new AsyncResult<Result>(result); } }
그런 다음 위의 서비스를 호출 할 구성 요소를 만듭니다 (선택 사항 - 다른 기존 서비스에서도 가능).
import java.util.concurrent.Future; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class AsyncClass { @Autowired private AsyncTask asyncTask; public void doAsyncOperation() throws Exception { List<Future<Result>> futures = new ArrayList<Future<Result>>(); for (int i = 1; i < 10; i++) { // Simulate multiple calls Future<Result > future = doAsync(String.valueOf(i)); futures.add(future); } for (Future<Result > future : futures) { // fetch the result Result result = future.get(); // process the result } } private Future<Result> doAsync(final String someArgument) { // this will immediately return with a placeholder Future object which // can be used later to fetch the result Future<Result> future = asyncTask.performAsync(someArgument); return future; } }
비동기를 활성화하는 데 필요한 샘플 XML 구성은 다음과 같습니다 (주석 기반 구성의 경우 @EnableAsync 사용).
<task:annotation-driven executor="myExecutor" /> <task:executor id="myExecutor" pool-size="30" rejection-policy="CALLER_RUNS"/>
자세한 문서는 여기를 참조하십시오.
from https://stackoverflow.com/questions/25741262/how-to-process-in-parallel-and-synchronously-in-spring-integration by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring JPA : 동일한 쿼리 인터페이스에서 다중 프로젝션 사용하기 (0) | 2019.01.21 |
---|---|
[SPRING] 봄 트랜잭션 cpool. 어느 것을 사용합니까? (0) | 2019.01.21 |
[SPRING] Tomcat에 배포하려고 할 때 발생 원인 : java.lang.NoSuchFieldError : NULL (0) | 2019.01.21 |
[SPRING] 스프링을 사용하여 동적으로 특성 파일로드 (0) | 2019.01.21 |
[SPRING] 탈 직렬화 중에 빈 객체를 무시하도록 Jackson에게 알려주는 방법? (0) | 2019.01.21 |