java使用ScheduledExecutorService延迟Spring WebClient调用不会等待响应
给定一个简单的REST控制器和服务方法(SpringBoot2.5.x和Java8),我如何实现以下目标
- 客户端将一些数据发布到REST控制器李>
- 控制器调用服务方法李>
- 服务方法应在固定延迟(例如10秒)后使用
WebClient
调用对外部API的REST调用
而1。二,。都是琐碎的,我挣扎着3。我的第一个实现是这样的,使用ScheduledExecutorService
。这实际上延迟了sendNotification()
的执行,但似乎忽略了这个REST调用的结果。如果外部API返回一个HTTP 4xx/5xx,我希望返回WebClientResponseException
,但这不会发生
也许这与ScheduledExecutorService
和一些线程问题有关
REST控制器类
@RestController
@RequiredArgsConstructor
public class ServiceController {
private final SampleService sampleService;
@PostMapping(value = "/api")
public String create(@RequestBody SampleRequest sampleRequest) {
return sampleService.create(sampleRequest);
}
}
服务等级
@Service
@RequiredArgsConstructor
public class SampleService {
private final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
public String create(SampleRequest sampleRequest) {
final String result = processSampleRequest(sampleRequest);
executorService.schedule(() -> sendNotification(), 10, TimeUnit.SECONDS);
return result;
}
public void sendNotification() {
final WebClient webClient = WebClient.builder()
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.build();
webClient.post()
.uri("http://localhost:5555")
.body(BodyInserters.fromValue("some string"))
.retrieve()
.toBodilessEntity()
.block();
}
}
共 (0) 个答案