okhttpの春の雲:章XX | SpringCloudに私に従ってください

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 : 8000Hello 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によってアクセスされることを証明するためのアクセス権を持っている見ることができます。

7.サンプルコード

コード-Githubサンプル

コード-Giteeサンプル

おすすめ

転載: www.cnblogs.com/babycomeon/p/11588751.html