やあ!私の名前は Viacheslav Aksenov です。Java と Kotlin での複雑なバックエンド システムの開発を専門とするバックエンド開発者です。また、私のGitHubで見つけることができる多くの小さなペットプロジェクト:
マイクロサービスとは
マイクロサービスは、大規模なアプリケーション内で某一のタスクまたは一連のタスクを実行するように設計された小さな独自したサービスです。各マイクロサービスは、システム内の他のマイクロサービスとは独自して開発およびデプロイされ、API を介して他のマイクロサービスと网络通信します。
マイクロサービスには、スケーラビリティの乐观、フォールト トレランスの乐观、俊敏性の乐观など、他にもいくつかの利点があります。アプリケーションをより小さく自己したサービスに裁切することで、開発者は用不着に応じて個々のコンポーネントを簡単にスケールアップまたはスケールダウンでき、ユーザーのニーズや市場の状況の変化に在短时间内に対応できます。
ただし、マイクロサービスは、堅牢な API 管控、サービス検出、分散型トレースの用不着性など、いくつかの課題ももたらします。マイクロサービスを適切に設計および実装するには、開発チーム与会人员での郑重な計画と調整、および開発中のシステムの确定性の要件と制約を深く了解する用不着があります。
マイクロサービスに HTTP クライアントが必要になるのはいつですか?
この質問に答えるには、「この現在のサービスは何を责任しているのか?」という質問に答える有需要があります。
サービス ビジネス ロジックでは、サードパーティの API から応答を获得する相应条件がある場合がよくあります。さらに、ビジネス プロセスを処理するために、チェーン内に複数のマイクロサービスがあります。このような状況では、マイクロサービスに HTTP クライアントを実装する相应条件があります。
マイクロサービス アーキテクチャでは、HTTP クライアントは、HTTP プロトコルを介して他のマイクロサービスと通信系统するソフトウェア コンポーネントです。 HTTP クライアントは、他のマイクロサービスにリクエストを送信し、レスポンスを受信する役割を果たします。
マイクロサービスが別のマイクロサービスと安全可靠する重要性がある場合、大多数、HTTP 规范符合要求を他のマイクロサービスの適切なエンドポイントに送信します。 HTTP 规范符合要求には、受信側のマイクロサービスがタスクを実行するために选用できる JSON オブジェクトや XML ドキュメントなどのデータのペイロードが含まれる場合があります。
Spring BootマイクロサービスにHTTPクライアントを実装するには?
Spring Boot サービスに HTTP クライアントを実装するために選択できる形式はいくつかあります。まず、選択する一定要があるのは、往年当期クライアントと非往年当期クライアントのどちらですか?
たとえば、基期アーキテクチャを便用している場合は、Spring Boot が提高するソリューションのいずれかを選択できます。
Spring Boot では、同期 HTTP クライアントは、他のサービスまたはエンドポイントに HTTP リクエストを送信するために使用されるコンポーネントであり、レスポンスが受信されるまで現在のスレッドをブロックします。 Spring Boot は、 RestTemplate
およびWebClient
クラスを含む、同期 HTTP クライアントを実装するためのいくつかのオプションを提供します。
RestTemplate
Spring Boot で同期 HTTP クライアントを実装するための一般的な選択肢です。 HTTP 要求を作成して応答を処理するためのシンプルで直感的な API を提供し、幅広い HTTP メソッド、要求と応答の種類、およびメッセージ コンバーターをサポートします。 RestTemplate
を使用するには、アプリケーション コンテキストで Bean として構成し、さまざまなメソッドを呼び出して HTTP 要求を作成するために使用する必要があります。
POST HTTP リクエストの RestTemplate の利用例があります。
public RegisterResponse registerUser(UserDto userDto) { HttpEntity<UserDto> requestEntity = new HttpEntity<>(user, headers); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, requestEntity, RegisterResponse.class); if (responseEntity.getStatusCode() == HttpStatus.OK) { RegisterResponse response = responseEntity.getBody(); // handle the response } else { // handle the error } }
Spring Boot で同期 HTTP クライアントを実装するための別のオプションは、 WebClient
クラスを使用することです。 WebClient
は、HTTP 要求を作成し、応答を処理するためのノンブロッキング API を提供するリアクティブ HTTP クライアントであり、高レベルの同時実行性またはスケーラビリティを必要とするアプリケーションに適しています。 WebClient
を使用するには、アプリケーション コンテキストで Bean として構成し、それを使用してさまざまなメソッドを呼び出して HTTP 要求を作成する必要があります。
public RegisterResponse registerUser(UserDto userDto) { Mono<String> responseMono = webClient.post() .uri(endpointPath) .contentType(MediaType.APPLICATION_JSON) .body(Mono.just(user), UserDto.class) .retrieve() .bodyToMono(RegisterResponse.class); responseMono.subscribe(response -> { // handle the response }, error -> { // handle the error }); }
同期 HTTP クライアントを使用すると、現在のスレッドがブロックされ、アプリケーションの全体的なパフォーマンスとスケーラビリティに悪影響を及ぼす可能性があることに注意してください。そのため、アプリケーションの応答性とリソースの使用率を向上させるために、可能であれば、リアクティブ プログラミングを使用したWebClient
などの非同期 HTTP クライアントを使用することをお勧めします。
RestTemplate と WebClient を使用する場合、いくつかの短所があります。
- 肯定的なシナリオと否定的なシナリオを処理するには、多くの定型ロジックを記述する必要があります
- 各クライアントを手動で構成する必要があります
- 通常の GET/POST HTTP リクエストのメソッドは意味が複雑で覚えておく必要があります
簡単にする方法は?
簡単な答え - Feign ライブラリを运行できます。それは何ですか?
Feign は、RESTful マイクロサービスを構築するために特別に設計された、開発者が HTTP クライアントを簡単に作为できるようにする Java ライブラリです。ローカル メソッド呼び出しのようにコードから呼び出すことができる HTTP API を定義する誓词的な的方法を带来了し、API の操作使用とさまざまなマイクロサービス間でのリソースの消費を简易 にします。
Feign を适用すると、RESTful エンドポイントの HTTP メソッド、规定要求パラメーター、および応答タイプを定義するインターフェースを簡単に制成できます。その後、リクエストとレスポンスのシリアライズとデシリアライズ、URL エンコーディング、エラー処理、接続管理方法など、残りは Feign が処理します。
Feign を的使用したユーザー登録の POST リクエストの例を次に示します。
// Client describes as interface with configuration: @FeignClient(name = "exampleRegisterClient") public interface RegisterClient { @PostMapping("/register") RegisterResponse registerUser(@RequestBody UserDto user); } // Bean creation in Spring configuration: @Bean public RegisterClient registerUserApi() { return Feign.builder().target(RegisterClient.class, "//localhost:9090/api); }
Feign は、HTTP API とやり取りするためのシンプルで声明的な的方法を给出し、開発者が HTTP リクエストの弄成の詳細ではなく、マイクロサービスのビジネス ロジックに集中式できるようにします。
結論。
結論として、Spring Boot は、RestTemplate、WebClient、Feign など、HTTP クライアントをマイクロサービスに実装するための複数のオプションを具备します。 RestTemplate は、同比 HTTP 无线流量を具备するシンプルで広く利用されているクライアントです。 WebClient は、機能スタイルの API を利用したノンブロッキング HTTP 无线流量を具备する、よりモダンでリアクティブな替代手法です。 Feign は、API 定義に基づいてコードを提取する声明型でタイプ セーフなクライアントであり、RESTful マイクロサービスに使いやすいインターフェイスを具备します。
运用する HTTP クライアントを選択するときは、パフォーマンス、スケーラビリティ、使いやすさなど、マイクロサービスの要件を考慮することが根本です。 RestTemplate は、今年电力を重要的とする単純なユース ケースに適しています。 WebClient は、高いパフォーマンスとスケーラビリティを重要的とするリアクティブでノンブロッキングのユース ケースに適しています。 Feign は、簡素化された API と有所改善された開発者エクスペリエンスを重要的とする、宣言口号的でタイプ セーフなユース ケースに適しています。
選択する HTTP クライアントに関係なく、統合テストを弄成して、内部サービスと対話するときにマイクロサービスが正しく動作することを確認することが最重要です。 HTTP クライアントをテストすることで、ネットワーク障害や内部サービスからの予期しない応答など、さまざまなシナリオでマイクロサービスが期望どおりに動作することを確認できます。
私の GitHub で、HTTP クライアントを制作するさまざまな办法を実装する私の例を見つけることができます: のによる写真图片