1. okhttpは何ですか?
okhttpは、正方形のHTTPクライアントによってオープンソースの会社です。Javaプラットフォームでは、Javaの標準ライブラリには、HTTP通信のHttpURLConnectionのためのクラスを提供します。しかし、HttpURLConnectionのAPI自体は十分に友好的ではないが、提供される機能は限られています。ほとんどのJavaプログラムは、HTTPクライアントとしてApacheオープンソースプロジェクトのHttpClientを使用することを選択されています。強力なのはApacheのHttpClientライブラリ、使用率が高いです。
2.なぜokhttpでしょうか?
okhttp設計されて、我々はそれが重要な理由の一つ選択理由である、シンプルかつ効率的です。次のようにその利点は以下のとおりです。
- HTTP / 2プロトコルをサポートします。
- すべてのリクエストは、同じホストアドレスに効率を改善するための要求を接続することを許可します。
- サーバー要求の数を減らし、ソケットを共有します。
- 接続プールを通じて、待ち時間を短縮するための要求。
- レスポンスデータキャッシュは、重複したネットワーク要求を低減します。
- データトラフィックの消費量を削減します。
- 自動処理GZIP圧縮。
3.実際のターゲット
- 代替okhttp使用装うのHTTPClient
- またHTTPClientのZuulはokhttp使用しました
装う4. okhttp
まず、いくつかの技術的構造は、この実証プロジェクトは、プロバイダのサーバ、消費者のサーバ、ユーレカ・サーバーとzuul・サーバーが含まれています。
4.1消費者のサーバー依存のpom.xml次のように:
リスト:chapter19 /コンシューマー・サーバ/のpom.xml
***
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
</dependencies>
feign-okhttp
ここでは、現在で導入されたバージョンを指定せずにfeign-okhttp
バージョン10.2.3を、そしてokhttp
バージョンとして、3.8.1です。
4.2プロファイルapplication.yml
リスト:chapter19 /コンシューマー・サーバ/ srcに/メイン/リソース/ application.yml
***
feign:
httpclient:
enabled: false
okhttp:
enabled: true
- 設定ファイルで装うのHTTPClientとオープンokhttpを使用するようにクローズします。
4.3コンフィギュレーションクラスOkHttpConfig.java
代码清单:chapter19 / consumerserver / srcに/メイン/ javaの/ COM / springcloud / consumerserver /設定/ OkHttpConfig.java
***
@Configuration
@ConditionalOnClass(Feign.class)
@AutoConfigureBefore(FeignAutoConfiguration.class)
public class OkHttpConfig {
@Bean
public OkHttpClient okHttpClient(){
return new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.connectionPool(new ConnectionPool(10 , 5L, TimeUnit.MINUTES))
.addInterceptor(new OkHttpLogInterceptor())
.build();
}
}
- コンフィギュレーションクラス内に
OkHttpClient
注入Springコンテナ、我々は、接続プールのサイズ、接続10を保持するの最大数を指定すること、および非アクティブの5分後に除去されます。 - ここで、著者はokhttpログインターセプタで構成されています。
4.4ログインターセプターOkHttpLogInterceptor.java
リスト:
***
@Slf4j
public class OkHttpLogInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
log.info("OkHttpUrl : " + chain.request().url());
return chain.proceed(chain.request());
}
}
- ここではインタフェースが実装されている
okhttp3.Interceptor
インターセプタブート春ではありません。 - ここでは単に、パスokhttp要求を印刷交通権及びその他のニーズがあるかどうかを確認インターセプタを実装配置することができます。
リモート装う呼び出すコードは、読者がアクセスのGithubリポジトリを得ることができる必要がある、無視します。
Zuul 5. okhttp
5.1のpom.xmlはokhttp依存追加しました
リスト:chapter19 / Zuul-サーバ/のpom.xml
***
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
5.2設定ファイルはokhttp開きます
リスト:chapter19 / Zuul-サーバ/ srcに/メイン/リソース/ application.yml
***
ribbon:
http:
client:
enabled: false
okhttp:
enabled: true
- 負荷分散の実装のでZuulリボンによって達成されるので、設定HTTPクライアントは、リボンの天然成分を構成しています。
6.テスト
我々は、プロバイダ・サーバを起動8000と8001ポートで、それぞれ、コンフィギュレーションを開始するためにアイデアを変更して、今度はプロジェクトの残りの部分を開始し、リンクにアクセスするためにブラウザを開きます。http:// localhost:8080 /コンシューマー/ハロー、 繰り返し更新し、あなたが見ることができるHello Spring Cloud! Port : 8000
とHello Spring Cloud! Port : 8001
交互本は、あなたがその負荷分散が成功したことを証明することができ、次のように、あなたは、消費者のサーバーのログを表示することができます表示されます。
2019-09-23 23:15:27.097 INFO 10536 --- [nio-9000-exec-5] c.s.c.intercepter.OkHttpLogInterceptor : OkHttpUrl : http://host.docker.internal:8001/hello
2019-09-23 23:15:27.593 INFO 10536 --- [nio-9000-exec-6] c.s.c.intercepter.OkHttpLogInterceptor : OkHttpUrl : http://host.docker.internal:8000/hello
2019-09-23 23:15:27.942 INFO 10536 --- [nio-9000-exec-7] c.s.c.intercepter.OkHttpLogInterceptor : OkHttpUrl : http://host.docker.internal:8001/hello
2019-09-23 23:15:28.251 INFO 10536 --- [nio-9000-exec-9] c.s.c.intercepter.OkHttpLogInterceptor : OkHttpUrl : http://host.docker.internal:8000/hello
2019-09-23 23:15:47.877 INFO 10536 --- [nio-9000-exec-8] c.s.c.intercepter.OkHttpLogInterceptor : OkHttpUrl : http://host.docker.internal:8001/hello
あなたは私たちが今、通常のカスタム印刷のログを本当にokhttpによってアクセスされることを証明するためのアクセス権を持っている見ることができます。