Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)

163 views

Published on

「今から始めるWebClient」
(JSUG勉強会 2020年その6 LT大会)

2020年7月30日
株式会社NTTデータ
伊藤 司

Published in: Technology
  • Be the first to comment

  • Be the first to like this

今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)

  1. 1. © 2020 NTT DATA Corporation 今から始めるWebClient JSUG勉強会 2020年その6 LT大会 2020年7月30日 株式会社NTTデータ 伊藤 司
  2. 2. © 2020 NTT DATA Corporation 2 今日話すこと SpringアプリケーションのHTTP Clientとして WebClientを使っていこう Spring Boot(MVC)でのWebClientの始め方
  3. 3. © 2020 NTT DATA Corporation 3 今日話さないこと WebFluxの詳しい話 Reactorの詳しい話 JettyベースのWebClient
  4. 4. © 2020 NTT DATA Corporation 4 WebClientって何? Reactor NettyベースのノンブロッキングなHTTP Client Spring WebFluxに同梱されている Spring MVCでも使える
  5. 5. © 2020 NTT DATA Corporation 5 なぜWebClient? SpringにおけるHTTP Clientといえば... RestTemplate
  6. 6. © 2020 NTT DATA Corporation 6 なぜWebClient? ですが... RestTemplateはSpring 5.0でメンテナンスモードに ※非推奨になったわけではありません
  7. 7. © 2020 NTT DATA Corporation 7 なぜWebClient? そこで... WebClient
  8. 8. © 2020 NTT DATA Corporation 8 WebClientを利用する際のメリット・デメリット メリット • Genericsの扱いが楽 • RestTemplateと比べてGenericsを素直に扱える • 大量のリクエストをさばきやすい • ノンブロッキングであるため、少ないスレッドで大量のリクエストを並列に実行できる • Reactorベースのインタフェースであるため、スレッドを意識せずに並列処理を記述できる デメリット • WebFlux/Reactorの理解が必要 • 凝った処理を実装したい場合にWebFlux/Reactorの知識が必要になる
  9. 9. © 2020 NTT DATA Corporation 9 WebClientの始め方 Spring Boot(MVC) + WebClient spring-boot-starter-webとspring-boot-starter-webfluxを依存関係に加える 両方が依存関係に含まれる場合、Spring MVCタイプのアプリケーションとして起動 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency>
  10. 10. © 2020 NTT DATA Corporation 10 WebClientの始め方 Spring Boot(MVC) + WebClient WebClient.Builderをインジェクションし、WebClientを生成する WebClient.BuilderはSpring BootのAuto ConfigurationによってBean定義されてい る。 @Component public class WebClientSample { private final WebClient webClient; public WebClientSample(WebClient.Builder webClientBuilder) { this.webClient = webClientBuilder.build(); } }
  11. 11. © 2020 NTT DATA Corporation 11 WebClientの基本的な使い方 – GETリクエスト public JsonNode get() { return webClient.get() // リクエストメソッドを指定 .uri("https://httpbin.org/delay/1") // URLを指定 .retrieve() // リクエスト実行 .bodyToMono(JsonNode.class) // レスポンスをオブジェクト(リアクティブ型)にマッピング .block(); // リアクティブ型から通常のオブジェクトを取得 }
  12. 12. © 2020 NTT DATA Corporation 12 WebClientの基本的な使い方 – POSTリクエスト public JsonNode post() { return webClient.post() // リクエストメソッドを指定 .uri("https://httpbin.org/delay/1") // URLを指定 .contentType(MediaType.APPLICATION_JSON) // コンテンツタイプを指定 .bodyValue(new Message("Hello WebClient")) // POSTのボディを指定 .retrieve() // リクエスト実行 .bodyToMono(JsonNode.class) // レスポンスをオブジェクト(リアクティブ型)にマッピング .block(); // リアクティブ型から通常のオブジェクトを取得 }
  13. 13. © 2020 NTT DATA Corporation 13 WebClientのカスタマイズ WebClient.Builderをカスタマイズ • WebClientCustomizerインタフェースを実装したクラスを作成する • デフォルトのURL、ヘッダ、Cookieなどを設定可能 WebClientが内部的に使用しているHttpClientをカスタマイズ • ReactorNettyHttpClientMapperインタフェースを実装したクラスを作成する • ReactorNetty、Nettyの知識が必要になるので若干ハードルが高い
  14. 14. © 2020 NTT DATA Corporation 14 WebClientのカスタマイズ例 - タイムアウト @Component public class ReactorNettyHttpClientTimeoutMapper implements ReactorNettyHttpClientMapper { @Override public HttpClient configure(HttpClient httpClient) { return httpClient.tcpConfiguration((tcpClient -> { // コネクションタイムアウト(ミリ秒で設定) return tcpClient.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000) .doOnConnected(conn -> conn // リードタイムアウト(秒で設定) .addHandlerLast(new ReadTimeoutHandler(30)) // ライトタイムアウト(秒で設定) .addHandlerLast(new WriteTimeoutHandler(30))); })); } }
  15. 15. © 2020 NTT DATA Corporation 15 まとめ Sprint Boot(MVC)でもWebClientを使っていき ましょう! WebClientをきっかけにして、WebFlux/Reactorにも 触れてみましょう! サンプルコードはこちら • https://github.com/itoutki/introduction-to-webclient
  16. 16. © 2020 NTT DATA Corporation 16 参考資料 • Web on Reactive Stack 2. WebClient • https://docs.spring.io/spring/docs/current/spring-framework-reference/web- reactive.html#webflux-client • Web on Servlet Stack 2.1. RestTemplate • https://docs.spring.io/spring/docs/current/spring-framework- reference/web.html#webmvc-resttemplate • 業務で使いたいWebFluxによるReactiveプログラミング • https://speakerdeck.com/shintanimoto/introduction-to-reactive-programming-using- spring-webflux • Functional Spring Cookbook • https://docs.google.com/presentation/d/1-0NopTfA-CGiCNvKPDOH9ZDMHhazKuoT- _1R69Wp8qs • SpringのWebClientのtimeoutとretryについて • https://blog.ik.am/entries/467
  17. 17. © 2020 NTT DATA Corporation その他、記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

×