SlideShare a Scribd company logo
1 of 17
© 2020 NTT DATA Corporation
今から始めるWebClient
JSUG勉強会 2020年その6 LT大会
2020年7月30日
株式会社NTTデータ
伊藤 司
© 2020 NTT DATA Corporation 2
今日話すこと
SpringアプリケーションのHTTP Clientとして
WebClientを使っていこう
Spring Boot(MVC)でのWebClientの始め方
© 2020 NTT DATA Corporation 3
今日話さないこと
WebFluxの詳しい話
Reactorの詳しい話
JettyベースのWebClient
© 2020 NTT DATA Corporation 4
WebClientって何?
Reactor NettyベースのノンブロッキングなHTTP
Client
Spring WebFluxに同梱されている
Spring MVCでも使える
© 2020 NTT DATA Corporation 5
なぜWebClient?
SpringにおけるHTTP Clientといえば...
RestTemplate
© 2020 NTT DATA Corporation 6
なぜWebClient?
ですが...
RestTemplateはSpring 5.0でメンテナンスモードに
※非推奨になったわけではありません
© 2020 NTT DATA Corporation 7
なぜWebClient?
そこで...
WebClient
© 2020 NTT DATA Corporation 8
WebClientを利用する際のメリット・デメリット
メリット
• Genericsの扱いが楽
• RestTemplateと比べてGenericsを素直に扱える
• 大量のリクエストをさばきやすい
• ノンブロッキングであるため、少ないスレッドで大量のリクエストを並列に実行できる
• Reactorベースのインタフェースであるため、スレッドを意識せずに並列処理を記述できる
デメリット
• WebFlux/Reactorの理解が必要
• 凝った処理を実装したい場合にWebFlux/Reactorの知識が必要になる
© 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>
© 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();
}
}
© 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(); // リアクティブ型から通常のオブジェクトを取得
}
© 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(); // リアクティブ型から通常のオブジェクトを取得
}
© 2020 NTT DATA Corporation 13
WebClientのカスタマイズ
WebClient.Builderをカスタマイズ
• WebClientCustomizerインタフェースを実装したクラスを作成する
• デフォルトのURL、ヘッダ、Cookieなどを設定可能
WebClientが内部的に使用しているHttpClientをカスタマイズ
• ReactorNettyHttpClientMapperインタフェースを実装したクラスを作成する
• ReactorNetty、Nettyの知識が必要になるので若干ハードルが高い
© 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)));
}));
}
}
© 2020 NTT DATA Corporation 15
まとめ
Sprint Boot(MVC)でもWebClientを使っていき
ましょう!
WebClientをきっかけにして、WebFlux/Reactorにも
触れてみましょう!
サンプルコードはこちら
• https://github.com/itoutki/introduction-to-webclient
© 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
© 2020 NTT DATA Corporation
その他、記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

More Related Content

What's hot

What's hot (20)

さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化Micrometerでメトリクスを収集してAmazon CloudWatchで可視化
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 

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

HttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何かHttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何か
ShigekiYamada
 
HTML5によるリアルタイムコミュニケーション WebRTCの概説
HTML5によるリアルタイムコミュニケーション WebRTCの概説HTML5によるリアルタイムコミュニケーション WebRTCの概説
HTML5によるリアルタイムコミュニケーション WebRTCの概説
You_Kinjoh
 

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

Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
HttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何かHttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何か
 
What happens in Spring Cloud Netflix
What happens in Spring Cloud NetflixWhat happens in Spring Cloud Netflix
What happens in Spring Cloud Netflix
 
SkyWay国内唯一のCPaaS
SkyWay国内唯一のCPaaSSkyWay国内唯一のCPaaS
SkyWay国内唯一のCPaaS
 
Node red hands on - public
Node red hands on - publicNode red hands on - public
Node red hands on - public
 
【AWS Night in ITHD】AWSとのSoftLayerで仮想ネットワークオーバーレイ
【AWS Night in ITHD】AWSとのSoftLayerで仮想ネットワークオーバーレイ【AWS Night in ITHD】AWSとのSoftLayerで仮想ネットワークオーバーレイ
【AWS Night in ITHD】AWSとのSoftLayerで仮想ネットワークオーバーレイ
 
注目の最新技術「WebRTC」とは? -技術概要と事例紹介-
注目の最新技術「WebRTC」とは? -技術概要と事例紹介-注目の最新技術「WebRTC」とは? -技術概要と事例紹介-
注目の最新技術「WebRTC」とは? -技術概要と事例紹介-
 
大規模・長期保守を見据えたエンタープライズ システム開発へのSpring Frameworkの適用
大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用
大規模・長期保守を見据えたエンタープライズ システム開発へのSpring Frameworkの適用
 
Linq Expressions でつくるスクリプト言語
Linq Expressions でつくるスクリプト言語Linq Expressions でつくるスクリプト言語
Linq Expressions でつくるスクリプト言語
 
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
 
話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみよう話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみよう
 
OCIjp_登壇資料
OCIjp_登壇資料OCIjp_登壇資料
OCIjp_登壇資料
 
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
 
getUserMedia
getUserMediagetUserMedia
getUserMedia
 
HTML5によるリアルタイムコミュニケーション WebRTCの概説
HTML5によるリアルタイムコミュニケーション WebRTCの概説HTML5によるリアルタイムコミュニケーション WebRTCの概説
HTML5によるリアルタイムコミュニケーション WebRTCの概説
 
【HinemosWorld2015】B1-6_【テクニカル】クラウドインフラの運用術
【HinemosWorld2015】B1-6_【テクニカル】クラウドインフラの運用術【HinemosWorld2015】B1-6_【テクニカル】クラウドインフラの運用術
【HinemosWorld2015】B1-6_【テクニカル】クラウドインフラの運用術
 
イケてる仮想化担当者のための今どきネットワーク虎の巻~VMwareソリューションの効果を最大化する必勝キーワードとその極意~
イケてる仮想化担当者のための今どきネットワーク虎の巻~VMwareソリューションの効果を最大化する必勝キーワードとその極意~イケてる仮想化担当者のための今どきネットワーク虎の巻~VMwareソリューションの効果を最大化する必勝キーワードとその極意~
イケてる仮想化担当者のための今どきネットワーク虎の巻~VMwareソリューションの効果を最大化する必勝キーワードとその極意~
 
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
 
Nutanix Meetup 23.01 Unno Wataru
Nutanix Meetup 23.01 Unno WataruNutanix Meetup 23.01 Unno Wataru
Nutanix Meetup 23.01 Unno Wataru
 
The Twelve-Factor App (2017)
The Twelve-Factor App (2017)The Twelve-Factor App (2017)
The Twelve-Factor App (2017)
 

More from NTT DATA Technology & Innovation

More from NTT DATA Technology & Innovation (20)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Recently uploaded

2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
 

Recently uploaded (12)

20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
 
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
 
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )
 
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 

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

  • 1. © 2020 NTT DATA Corporation 今から始めるWebClient JSUG勉強会 2020年その6 LT大会 2020年7月30日 株式会社NTTデータ 伊藤 司
  • 2. © 2020 NTT DATA Corporation 2 今日話すこと SpringアプリケーションのHTTP Clientとして WebClientを使っていこう Spring Boot(MVC)でのWebClientの始め方
  • 3. © 2020 NTT DATA Corporation 3 今日話さないこと WebFluxの詳しい話 Reactorの詳しい話 JettyベースのWebClient
  • 4. © 2020 NTT DATA Corporation 4 WebClientって何? Reactor NettyベースのノンブロッキングなHTTP Client Spring WebFluxに同梱されている Spring MVCでも使える
  • 5. © 2020 NTT DATA Corporation 5 なぜWebClient? SpringにおけるHTTP Clientといえば... RestTemplate
  • 6. © 2020 NTT DATA Corporation 6 なぜWebClient? ですが... RestTemplateはSpring 5.0でメンテナンスモードに ※非推奨になったわけではありません
  • 7. © 2020 NTT DATA Corporation 7 なぜWebClient? そこで... WebClient
  • 8. © 2020 NTT DATA Corporation 8 WebClientを利用する際のメリット・デメリット メリット • Genericsの扱いが楽 • RestTemplateと比べてGenericsを素直に扱える • 大量のリクエストをさばきやすい • ノンブロッキングであるため、少ないスレッドで大量のリクエストを並列に実行できる • Reactorベースのインタフェースであるため、スレッドを意識せずに並列処理を記述できる デメリット • WebFlux/Reactorの理解が必要 • 凝った処理を実装したい場合にWebFlux/Reactorの知識が必要になる
  • 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. © 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. © 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. © 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. © 2020 NTT DATA Corporation 13 WebClientのカスタマイズ WebClient.Builderをカスタマイズ • WebClientCustomizerインタフェースを実装したクラスを作成する • デフォルトのURL、ヘッダ、Cookieなどを設定可能 WebClientが内部的に使用しているHttpClientをカスタマイズ • ReactorNettyHttpClientMapperインタフェースを実装したクラスを作成する • ReactorNetty、Nettyの知識が必要になるので若干ハードルが高い
  • 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. © 2020 NTT DATA Corporation 15 まとめ Sprint Boot(MVC)でもWebClientを使っていき ましょう! WebClientをきっかけにして、WebFlux/Reactorにも 触れてみましょう! サンプルコードはこちら • https://github.com/itoutki/introduction-to-webclient
  • 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. © 2020 NTT DATA Corporation その他、記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。