RestTemplate 的 post/get 请求,造成 程序停顿 2小时

RestTemplate 的 post/get 请求,造成 程序停顿 2h

异常的现象:
执行到 上面代码的 第5行后,不再往下继续执行,会停顿 2h 甚至更久(时长与 restTemplate 是否有资源有关)。由于这是后端服务处理程序,不存在超时问题,所以会长时间 停顿,处在假死状态。

如果是接受前端请求的接口,会造成大量请求超时无响应。

 

启动类:

@SpringBootApplication(scanBasePackages = { "com.wqb.platform"})
@EnableSwagger2
@EnableDiscoveryClient
@EnableFeignClients(basePackages = {"com.wqb.platform"})
@ComponentScan(basePackages = {"com.wqb.platform"},
        excludeFilters = {  @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.other.common.*"),
                            @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.second.config.*")
})
@EnableAsync
@EnableRetry
public class PlatFormApplication {

    public static void main(String[] args) {
        SpringApplication.run(PlatFormApplication.class,args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

 

请求发起类:

1 RestTemplate restTemplate = new RestTemplate();
2 HttpHeaders requestHeaders = new HttpHeaders();
3 requestHeaders.setContentType(MediaType.APPLICATION_JSON);
4 HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, requestHeaders);
5 String jsonStr = restTemplate.postForObject(url, requestEntity, String.class);
6 system.out.print("请求结果:" + jsonStr);

 

处理方式是:

将 ‘请求发起类’的第1行 RestTemplate restTemplate = new RestTemplate();

实例的创建,交给 spring 来管理和维护, 使用 注入的方式:

    @Autowired
    private RestTemplate restTemplate;

请求发起类:调整为

1 // RestTemplate restTemplate = new RestTemplate();
2 HttpHeaders requestHeaders = new HttpHeaders();
3 requestHeaders.setContentType(MediaType.APPLICATION_JSON);
4 HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, requestHeaders);
5 String jsonStr = restTemplate.postForObject(url, requestEntity, String.class);
6 system.out.print("请求结果:" + jsonStr);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章