Spring Boot跨服务调用504网关超时问题的排查与解决
解决Spring Boot应用间调用的504网关超时问题
问题背景
我有两个互相调用的Spring Boot REST应用:ProjectA的/test接口有时需耗时1分钟,由ProjectB发起调用。
ProjectA接口代码
@PostMapping(value = "/test") public ResponseEntity<Map<byte[], List<String>>> getTest( @RequestBody ObjectDTO configDto) { try { HashMap<byte[], List<String>> testMap = serviceImpl.test(configDto); if (!testMap.isEmpty()) return new ResponseEntity<>(testMap, HttpStatus.CREATED); else return new ResponseEntity<>(testMap, HttpStatus.NO_CONTENT); } catch (Exception e) { return ResponseEntity.badRequest().build(); } }
ProjectB调用代码
@PostMapping(value = "/getTest") @Async public ResponseEntity<Map<byte[], List<String>>> getTest( @RequestBody Config config) { try { Map<byte[], List<String>> val = serviceImpl.testConfig(config); return new ResponseEntity<>(val, HttpStatus.CREATED); } catch (Exception e) { return ResponseEntity.badRequest().build(); } }
问题现象
本地运行正常,但生产环境中总是在6.2秒后返回:
upstream request timeout
已在ProjectB中配置以下超时参数,但未生效:
server.tomcat.connection-timeout=120000 spring.mvc.async.request-timeout=120000
解决方案
通过修改Ambassador的YAML配置文件设置超时参数解决了问题,配置如下:
apiVersion: getambassador.io/v2 kind: Mapping metadata: name: ambassador-header-mapping namespace: x spec: prefix: / timeout_ms: 60000 service: dummyservice:8080 ambassador_id: ambassador-x headers: X-Forwarded-Proto: https Host: dummyhost
内容的提问来源于stack exchange,提问作者volkangurbuz
相关产品推荐
相关产品推荐

