Spring Boot Rest API请求超时实现引发Cassandra连接问题排查
Spring Boot异步Callable导致Cassandra测试连接异常,超时机制冲突
我基于Spring Boot开发REST微服务,因调用的第三方API响应耗时较长,想实现请求超时机制避免应用崩溃。参考资料显示可通过配置spring.mvc.async.request-timeout并让控制器端点返回Callable来实现,但运行JUnit测试时出现Cassandra连接问题;移除Callable后测试可正常运行,但超时机制失效。
控制器端点代码
@PostMapping("/deposit-accounts") public Callable<ResponseEntity<DepositResponse>> getAccountCapabilities(@Valid @RequestBody DepositRequest request) { return () -> { final DepositResponse response = depositService.getCapabilities(request); if (response.getCapabilities().size() > 1 && response.getCapabilities().stream() .filter(c -> ResponseCodes.INTERNAL_HOST_ERROR.equals(c.getResponseCode())).count() > 0) { return ResponseEntity.status(207).body(response); } return ResponseEntity.ok(response); }; }
JUnit测试代码
@Test @DisplayName("testResponseDelay") void testResponseDelay() throws Exception { String request = readResourceFileToString("payloads/depositaccount/request.json"); String casAPIResponse = readResourceFileToString("payloads/depositaccount/cas/response.xml"); mockCASApi.enqueue(new MockResponse() .setBody(casAPIResponse) .addHeader("Content-Type", TEXT_XML_VALUE)); this.mockMvc .perform(post("/payments/capabilities/deposit") .contentType(MediaType.APPLICATION_JSON).content(request)) .andExpect(status().is(200)); }
超时配置(application.yaml)
mvc: async: request-timeout: 5000
补充说明:第三方服务调用使用RestTemplate,Cassandra部署在本地用于JUnit测试。
我不确定当前Callable的用法是否正确,也无法理解为何它会引发Cassandra连接问题,恳请指点。
内容的提问来源于stack exchange,提问作者pash
相关产品推荐
相关产品推荐

