Springboot-RestTemplate戦闘サービスコールレコード

springbootはresttemplate内に来た私たちは、他の長距離電話サービスのインタフェースの役割を達成するのを助けることができ、実際にHTTPClientをカプセル化し、退屈にHTTPClient

Springbootは、設定、管理および利きsprinngするために独自の構成クラスで構成します。

HttpClientをシングルトン接続オブジェクトを確保するために、廃棄物のヒープメモリで、その結果、プロジェクト内のオブジェクトを頻繁に作成することは避けてください。

長所:簡単な構成、柔軟なリクエストパラメータ。

短所:のtry-catchエラーが手動でキャプチャを必要とし、ログを見ていない問題がヒューズではありません見つけることは容易ではない、あなたは、エラーコードが検出するように、ヒューズの状態に応じて返される指定することができます。

ConfigurationクラスRestTemplateConfig:

@Configuration 
パブリッククラスRestTemplateConfig {

@Bean
公共RestTemplate httpRestTemplate(){
ClientHttpRequestFactory工場= httpRequestFactory()。
RestTemplate restTemplate =新しいRestTemplate(工場)。
//可以添加消息转换
//restTemplate.setMessageConverters(...);
//可以增加拦截器
//restTemplate.setInterceptors(...);
restTemplateを返します。
}

公共ClientHttpRequestFactory httpRequestFactory(){
戻り新しいHttpComponentsClientHttpRequestFactory(restTemplateConfigHttpClient())。
}

公共のHttpClient restTemplateConfigHttpClient(){
レジストリ<ConnectionSocketFactory> = RegistryBuilderレジストリ<ConnectionSocketFactory>(作成)
.register( "HTTP"、PlainConnectionSocketFactory.getSocketFactory())
.register( "HTTPS"、SSLConnectionSocketFactory.getSocketFactory())
.build();
PoolingHttpClientConnectionManagerのConnectionManager =新しい新しいPoolingHttpClientConnectionManager (レジストリ)は、
最大の全体的なプールに応じて接続を接続設定//どのシーン
connectionManager.setMaxTotal(200で);
// maxTotal経路がで細分される
connectionManager.setDefaultMaxPerRoute(100);
requestConfig requestConfig RequestConfig.custom =()
/ /時刻データは、サーバ(レスポンス)によって返され、そしてこの時間がスロー読みタイムアウトを超えています
.setSocketTimeout(10000)
時間がタイムアウト接続スローそれを超えるサーバー(成功ハンドシェーク)に//接続時間
.setConnectTimeoutを(5000)
//接続プール、接続されていません取得するために利用可能な時間を超えてからのタイムアウト接続を取得、
//はorg.apache.http.conn.ConnectionPoolTimeoutExceptionをスロー:
//は、プールから接続タイムアウトを待機
.setConnectionRequestTimeout(5000)
.build();
()HttpClientBuilder.createを返す
.setDefaultRequestConfig(requestConfig)
.setConnectionManager(のConnectionManager)
;)(ビルド
}
}
:注射を
@Autowired 
RestTemplateConfig restTemplateConfig;

要求:

 

RestTemplate httpRestTemplate = restTemplateConfig.httpRestTemplate()。
{試す
一覧<整数> requestBean =新しいArrayListを<>();
。result.stream()マップ( - > {
requestBean.add(a.getId());
リターン;
})()(Collectors.toList)を集めます;。
地図マップ= httpRestTemplate.postForObject(服务URL、requestBean、Map.class)。
。結果= result.stream()マップ( - > {
イテレータイテレータ= map.keySet()反復子();
(iterator.hasNext()){一方
、文字列)文字列(=キーiterator.next()
オブジェクトobj = map.get(キー);
IF(String.valueOf(a.getId())に等しい(キー)){
整数I =(整数)OBJ。
a.setCourseCount(I)、
Aを返す;
}
}
を返す;
})を収集(Collectors.toList());
}キャッチ(例外E){
System.err.println( "サービス・コール:" + metel2ApiUrl +「クエリ)」コースの異常な数;
e.printStackTrace();
}
結果を返します。

 

おすすめ

転載: www.cnblogs.com/mlzdev/p/11800140.html