国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java中http請求之restTemplate配置超時時間(親測有用?。?/h1>

這篇具有很好參考價值的文章主要介紹了java中http請求之restTemplate配置超時時間(親測有用?。?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

問題:http請求發(fā)起后接收不到返回數(shù)據(jù)!??!【測試環(huán)境沒出問題,發(fā)到正式環(huán)境就有問題】

項(xiàng)目中通過restTemplate發(fā)起請求:

        log.info("請求入?yún)?{}",JSON.toJSONString(request));//打印日志1
       
        // 配置http請求的連接超時時間和讀取超時時間
        HttpsClientRequestFactory factory = new HttpsClientRequestFactory();
        factory.setConnectTimeout(60 * 1000);
        factory.setReadTimeout(5 * 60 * 1000);
        RestTemplate restTemplate = new RestTemplate(factory);
        Result<InventoryResult> result = restTemplate.postForObject(address.concat(inventoryUrl), request, Result.class);

        log.info("庫存同步,返回數(shù)據(jù): {}", result);//打印日志2

打印日志1內(nèi)容為:

http請求入?yún)?{data=[{ productStatus=10,skuCode=null}], messageId=ewpfpr1t6ey5r6qj0su0w1h6rt73hr,token=vgvU5EJKuZbuHii7WH6pTINp40ZRicaqLz4dq5P7L6pDzWir8EEGZhCKPucQjljsw69EHasEy+iJfdTofDg==}

日志打印2沒有打印內(nèi)容?。?!

最后發(fā)現(xiàn)是因?yàn)闇y試環(huán)境中數(shù)據(jù)量較小,http請求后,很快能得到相應(yīng),而正式環(huán)境數(shù)據(jù)量較大,沒有及時得到響應(yīng),連接或者讀取超時?。。?/p>

三種解決方式:

第一種

1、添加HttpsClientRequestFactory 類,并繼承SimpleClientHttpRequestFactory?

/**
 * 兼容調(diào)Https接口
 */
public class HttpsClientRequestFactory extends SimpleClientHttpRequestFactory {

    @Override
    protected void prepareConnection(HttpURLConnection connection, String httpMethod)
            throws IOException {
        if (connection instanceof HttpsURLConnection) {
            prepareHttpsConnection((HttpsURLConnection) connection);
        }
        super.prepareConnection(connection, httpMethod);
    }

    private void prepareHttpsConnection(HttpsURLConnection connection) {
        connection.setHostnameVerifier(new SkipHostnameVerifier());
        try {
            connection.setSSLSocketFactory(createSslSocketFactory());
        }
        catch (Exception ex) {
            // Ignore
        }
    }

    private SSLSocketFactory createSslSocketFactory() throws Exception {
        SSLContext context = SSLContext.getInstance("TLS");
        context.init(null, new TrustManager[] { new SkipX509TrustManager() },
                new SecureRandom());
        return context.getSocketFactory();
    }

    private class SkipHostnameVerifier implements HostnameVerifier {

        @Override
        public boolean verify(String s, SSLSession sslSession) {
            return true;
        }

    }

    private static class SkipX509TrustManager implements X509TrustManager {

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
        }

        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) {
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) {
        }

    }
}

2、使用restTemplate發(fā)起請求前先設(shè)置連接和超時時間即可;

//配置http請求的連接超時時間和讀取超時時間
HttpsClientRequestFactory factory = new HttpsClientRequestFactory();
factory.setConnectTimeout(60 * 1000);
factory.setReadTimeout(5 * 60 * 1000);
RestTemplate restTemplate = new RestTemplate(factory);
BaseResult<QueryInventoryResult> result = restTemplate.postForObject(address.concat(inventoryUrl), request, Result.class);

或者通過容器加載配置類,然后設(shè)置超時時間進(jìn)去,使用的時候直接注入restTemplate即可??;

@Configuration
public class RestConfig {

    //60 * 1000
    @Value("${rest.connectTimeout:60000}")
    private int connectTimeout;

    //5 * 60 * 1000
    @Value("${rest.readTimeout:300000}")
    private int readTimeout;

    @Bean
    public RestTemplate restTemplate() {
        SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
        simpleClientHttpRequestFactory.setConnectTimeout(connectTimeout);
        simpleClientHttpRequestFactory.setReadTimeout(readTimeout);
        RestTemplate restTemplate = new RestTemplate(simpleClientHttpRequestFactory);
        return restTemplate;
    }

第二種

@Configuration
public class RestConfig {

    //60 * 1000
    @Value("${rest.connectTimeout:60000}")
    private int connectTimeout;

    //5 * 60 * 1000
    @Value("${rest.readTimeout:300000}")
    private int readTimeout;  

    @Value("${rest.connectionRequestTimeout:300000}")
    private int connectionRequestTimeout;  

  /**
     * 使用 HttpComponentsClientHttpRequestFactory創(chuàng)建http請求(推薦)
     */
    @Bean
    public RestTemplate restTemplate() {
        HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
        httpRequestFactory.setConnectionRequestTimeout(connectionRequestTimeout);
        httpRequestFactory.setConnectTimeout(connectTimeout);
        httpRequestFactory.setReadTimeout(readTimeout);
        return new RestTemplate(httpRequestFactory);

    }
}

第三種(基于第二種升級)

@Configuration
public class RestConfig {
 
  
    /**
     * 高并發(fā)采用HttpClient連接池
     */
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate(httpRequestFactory());
    }


    @Bean
    public ClientHttpRequestFactory httpRequestFactory() {
        return new HttpComponentsClientHttpRequestFactory(httpClient());
    }


    @Bean
    public HttpClient httpClient() {
        Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.getSocketFactory())
                .register("https", SSLConnectionSocketFactory.getSocketFactory())
                .build();
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
        //設(shè)置整個連接池最大連接數(shù)
        connectionManager.setMaxTotal(400);

        //路由是對maxTotal的細(xì)分
        connectionManager.setDefaultMaxPerRoute(100);
        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(30000)  //返回數(shù)據(jù)的超時時間
                .setConnectTimeout(20000) //連接上服務(wù)器的超時時間
                .setConnectionRequestTimeout(1000) //從連接池中獲取連接的超時時間
                .build();
        return HttpClientBuilder.create()
                .setDefaultRequestConfig(requestConfig)
                .setConnectionManager(connectionManager)
                .build();
    }
}

問題得到解決、、、、、、文章來源地址http://www.zghlxwxcb.cn/news/detail-502313.html

到了這里,關(guān)于java中http請求之restTemplate配置超時時間(親測有用?。┑奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【API接口工具】postman設(shè)置超時時間、請求等默認(rèn)配置

    【API接口工具】postman設(shè)置超時時間、請求等默認(rèn)配置

    Postman 會自動為某些設(shè)置選擇默認(rèn)值,以便您可以開始工作。根據(jù)您的用例隨時更改設(shè)置或自定義您的 Postman 體驗(yàn)。 要更改 Postman 中的設(shè)置,請選擇 設(shè)置圖標(biāo) 標(biāo)題中的設(shè)置圖標(biāo),然后選擇設(shè)置。在 Postman 桌面應(yīng)用程序中,您還可以選擇?+逗號 (,)或Ctrl+逗號 (,) 使用“General”

    2024年02月08日
    瀏覽(26)
  • springboot配置http連接超時時間主動斷開避免產(chǎn)生大量close_wait

    與客戶端聯(lián)調(diào)接口,通信方式使用http連接,客戶端設(shè)置了發(fā)起請求后10s就斷開連接,然后果不其然,我在服務(wù)端這邊收到了大量的close_wait狀態(tài),最終導(dǎo)致接口不可用。 close_wait產(chǎn)生的原因就是客戶端斷開了連接但是沒有發(fā)FIN給到服務(wù)端,所以服務(wù)端不知道還一直在跟客戶端通

    2024年02月16日
    瀏覽(23)
  • 【java】Spring Cloud --Feign Client超時時間配置以及單獨(dú)給某接口設(shè)置超時時間方法

    FeignClient面對服務(wù)級有三種超時時間配置 feign配置是在ribbon配置的基礎(chǔ)上做了擴(kuò)展,可以支持服務(wù)級超時時間配置,所以,feign配置和ribbon配置的效果應(yīng)該是一樣的。 SpringCloud對這兩種配置的優(yōu)先級順序如下: Feign局部配置 Feign全局配置 Ribbon局部配置 Ribbon全局配置 在feign-co

    2024年02月12日
    瀏覽(22)
  • RestTemplate.postForEntity 方法進(jìn)行 HTTP POST 請求

    RestTemplate 是 Spring Framework 提供的一個用于處理 HTTP 請求的客戶端工具。其中,postForEntity 是 RestTemplate 提供的用于發(fā)送 HTTP POST 請求并返回 ResponseEntity 對象的方法。 url(String):HTTP POST 請求的目標(biāo)URL。 request(Object):要發(fā)送的請求體數(shù)據(jù),通常是一個對象,它將被轉(zhuǎn)換為請

    2024年02月03日
    瀏覽(25)
  • Http請求實(shí)戰(zhàn) ---- 【restTemplate.exchange方法】的簡單了解應(yīng)用

    RestTemple是Spring提供的用于訪問Http請求的客戶端; 相對于apache的HTTPClient類,邏輯繁瑣,代碼復(fù)雜,還要自己編寫使用類HttpClientUtil,封裝對應(yīng)的post,get,delete等方法。 RestTemplate可以通過callback回調(diào)方法和配置HttpMessageConverter 來定制,用來把對象封裝到HTTP請求體,將響應(yīng)信息

    2024年02月13日
    瀏覽(18)
  • Springboot -- 用更優(yōu)雅的方式發(fā)HTTP請求(RestTemplate詳解)

    Springboot -- 用更優(yōu)雅的方式發(fā)HTTP請求(RestTemplate詳解)

    RestTemplate 是 Spring 提供的用于訪問Rest服務(wù)的客戶端, RestTemplate 提供了多種便捷訪問遠(yuǎn)程Http服務(wù)的方法,能夠大大提高客戶端的編寫效率。 我之前的HTTP開發(fā)是用apache的HttpClient開發(fā),代碼復(fù)雜,還得操心資源回收等。代碼很復(fù)雜,冗余代碼多,稍微截個圖,這是我封裝好的一

    2024年02月02日
    瀏覽(22)
  • 【SpringBoot】springboot使用RestTemplate 進(jìn)行http請求失敗自動重試

    【SpringBoot】springboot使用RestTemplate 進(jìn)行http請求失敗自動重試

    我們的服務(wù)需要調(diào)用別人的接口,由于對方的接口服務(wù)不是很穩(wěn)定,經(jīng)常超時,于是需要增加一套重試邏輯。這里使用 Spring Retry 的方式來實(shí)現(xiàn)。 一、引入POM 二、 修改啟動類 在Spring Boot 應(yīng)用入口啟動類,也就是配置類的上面加上 @EnableRetry 注解,表示讓重試機(jī)制生效。 注意

    2024年02月08日
    瀏覽(19)
  • Axios設(shè)置請求超時時間 timeout

    1.axios全局設(shè)置網(wǎng)絡(luò)超時 2.?單獨(dú)對某個請求設(shè)置網(wǎng)絡(luò)超時 3.webpack的dev的proxyTable的超時時間設(shè)置

    2024年04月10日
    瀏覽(19)
  • 接口響應(yīng)時間長,前端返回請求超時解決

    1. 全局設(shè)置 axios.defaults.timeout = 時間 // 單位為毫秒 或 2. 封裝的http請求 或 3. nginx默認(rèn)的響應(yīng)時間是60S 還需要修改nginx.conf文件 在配置的請求代理下添加 單位為秒

    2024年02月12日
    瀏覽(104)
  • golang 通過context設(shè)置接口請求超時時間

    下面是直接可應(yīng)用的實(shí)例:

    2024年02月10日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包