呼叫控制器時,我需要啟動兩個提供程式。其中之一(personProvider)必須在后臺完成其作業并將資料寫入Redis快取(我在這里不需要他的作業結果)。我需要映射并將第二個(accountsProvider)的結果發送到呼叫服務。請告訴我如何并行運行它們。我的解決方案不起作用,因為它們始終如一地執行。
@GetMapping(value = "/accounts", produces = MediaType.APPLICATION_JSON_VALUE)
public Mono<myDTO> accountsController(@RequestHeader("Channel") String channel,
@RequestHeader("Session") String sessionId) {
return clientSessionProvider.getClientSession(sessionId, channel) // return Mono<String>
.flatMap(clientData-> {
personProvider.getPersonCard(clientData) // My background task return Mono<PersonCard>
.subscribeOn(Schedulers.boundedElastic());
return accountsProvider.getAccounts(clientData) // return Mono<Accounts>
.subscribeOn(Schedulers.boundedElastic());
})
.map(myDTOMapper::map);
}
uj5u.com熱心網友回復:
我創建靜態調度程式作為我的控制器類的欄位:
private static final Scheduler backgroundTaskScheduler = Schedulers.newParallel("backgroundTaskScheduler", 2);
public Mono<myDTO> accountsController(@RequestHeader("Channel") String channel,
@RequestHeader("Session") String sessionId) {
return clientSessionProvider.getClientSession(sessionId, channel)
.flatMap(clientData-> {
backgroundTaskScheduler.schedule(() -> personProvider.getPersonCard(clientData));
return accountsProvider.getAccounts(clientData);
})
.map(myDTOMapper::map);
在這種情況下,我的 personProvider 在其他執行緒中啟動并且不會阻止來自控制器的回應。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/387103.html
