I.はじめに
いくつかのコアコンポーネントによっていくつかの春のクラウドを導入する前に、我々はすでに、単純なマイクロサービスアーキテクチャを構築することができ、これは次の図のようになります。
外部アプリケーションのマルチ環境の設定とバージョン管理を実現春クラウドコンフィグにより、リボンまたは装う消費とロードバランシングを使用してサービス間のサービスを実装し、我々はサービスレジストリおよびサービスの登録と発見を実現ユーレカに春クラウドNetflixのを使用します。マイクロサービスアーキテクチャの普及に異常な個々のサービスを避けるために、資金メカニズムHystrixオフの使用によって引き起こされるサービスより堅牢なクラスタ障害を作るために。マイクロサービスフレームワークが完了したと思われます。
我々はまだいくつかの問題、考える内部マイクロのさまざまなサービスにアクセスする方法の外部アプリケーションを?マイクロサービスアーキテクチャでは、バックエンドサービスは、多くの場合、呼び出し側に直接開いていないですが、URL要求に基づいて、適切なサービスをAPIゲートウェイを介してルーティングされます。APIゲートウェイ、サードパーティのサービスプロバイダとの壁を作成するには、当事者間のエンドコールを追加する場合は、この壁の権限は、直接バックグラウンド・サーバーにバランスの取れた配分を要求した後、呼び出し側との通信を制御します。
第二に、なぜ必要のAPI Gatewayの?
1、クライアントを簡素化することの複雑呼び出す
一般的にはマイクロサービスアーキテクチャモデルのバックエンドサービス内のインスタンスの数が、情報を動的に変更するクライアントアクセスアドレスサービスインスタンスを見つけるのは難しいという点で、動的です。したがってAPIゲートウェイは、内側とサービスとの間のクロスコールの複雑さを簡略化することも実装依存の認証ロジックであろうが、通常軽量ようにゲートウェイAPIゲートウェイを含むコール・ロジック、のフロントエンドを簡単にするためにマイクロプログラムのサービスに基づきます。
図2は、データ集約及び切断
された表示データのための一般的な別のクライアント要求は、携帯電話やWeb側及び末端または低レイテンシのネットワーク環境や高遅延ネットワーク環境として、矛盾しています。
そのため、クライアントエクスペリエンスを最適化するために、APIゲートウェイは、さまざまなクライアントのニーズに合わせて応答データの汎用性に合わせて調整することができます。しかし、また、それによって、クライアントからのリクエストの数を減らし、ユーザーエクスペリエンスを最適化するためのクライアントAPI呼び出しロジック重合複数のことができます。
3は、マルチチャネルのサポートは
、もちろん我々はまた別のよく知られた方法によって呼び出され、このモードを使用して、異なるチャネルおよびクライアントのために異なるAPIゲートウェイを提供することができますバックエンドフロントエンドのために、フロントエンドモードのバックエンドの間で、我々は、この記事を参照することができ、よりBFFについて学ぶために、さまざまなクライアントのために、それぞれ自分のBFFを作成することができます:パターン:フロントエンドのためのバックエンドを
図4に示すように、レガシーシステムのマイクロサービス変換
システム用のマイクロサービス改革は、通常、技術的負債、コード品質、保守性、拡張性などのような多かれ少なかれ元のシステム、問題によるものです。APIゲートウェイモードにも対応力を強化するために、既存のビジネスを強化するように、レガシーシステム、マイクロサービスの変換により、元のシステムの問題の修理の漸進的実現のこのタイプの変換に適用されます。抽象化レイヤを導入することにより、徐々に達成するための新しい実装で古いものを交換してください。
春のクラウドシステムでは、春クラウドZuulは、ロードバランシング、リバースプロキシ、認証局のAPIゲートウェイを提供することです。
私たちは、実際には、NetflixのはZuul 2をリリースしました、これはZuul Zuul 1であると言うが、それは1春クラウドゲートウェイになっていたので、春はおそらく前ので(、Zuul 2春クラウドエコロジーの意味に統合していないようですZuul 2)リードはそれを待つことができないバウンスされています。この高性能ゲートウェイたち以降の春クラウドゲートウェイについて。
三、春の雲Zuul
スプリングクラウドZuul、ルーティング動的ルーティング、監視、エッジの柔軟性、セキュリティ、およびその他のサービスを提供し、マイクロサービスアーキテクチャの不可欠な部分です。ZuulのNetflixは、JVMルーティングおよびサーバロードバランサに基づいて生成されます。
私たちは、それがZuulの仕組みを理解するには、次のコードを採用しました
第四に、実際の
1.準備
サービスゲートウェイを構築する前に、我々は次のようないくつかの前に書かれた直接コンテンツを、使用することができ、第一のマイクロゲートウェイサービスの内部を見て準備ができています:
- ユーレカ
- プロデューサー
- 消費者
インスタンスユーレカ、生産者と消費者を起動した後、すべての準備作業は、のは、機能的なサービスゲートウェイを達成するために春クラウドZuulを使用してみましょう、準備ができています。
プロジェクトのAPIゲートウェイを作成します。2.
次のように3.POMファイル
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>api-gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>api-gateway</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
</properties>
<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-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
4. application.ymlプロファイル次のように:
spring:
application:
name: api-gateway
server:
port: 14000
eureka:
client:
service-url:
defaultZone: http://localhost:7000/eureka/
5.スタートクラス
使用 @EnableZuulProxy
オープンZuul機能への注釈
package com.example.apigateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@EnableZuulProxy
@SpringBootApplication
public class ApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayApplication.class, args);
}
}
ここでは、春のクラウドZuulに基づいてサービスゲートウェイは、完成した建物がありました。アプリケーション、完成建物へのデフォルトのサービス・ゲートウェイを起動し、同時にユーレカのこのサービスを見ることができるように。
ファイブテスト
春クラウドZuulので、デフォルトのサービスとユーレカの統合、後すなわち、ルーティング機能:私たちはここに建てた場合 api-gateway
、アプリケーションが起動された後、ユーレカに登録し、サービスゲートウェイは、我々上記の2つのサービスを開始しましたでしょう producer
し、 consumer
Zuulは、この時点で、します2つのルーティングルールを作成します。各ルーティングルールは、他のルートサービスIDであり、二つの部分、マッチングルール外部要求から成ります。現在たとえば、Zuulは、以下の2つのルーティングルールを作成します。
- 転送
producer
要求されたサービスのルール:/producer/**
- 転送
consumer
要求されたサービスのルール:/consumer/**
最後に、アクセスすることができる 14000
上記ルーティングサービスゲートウェイポートの正しさを検証します。
- アクセス例:HTTP:// localhostを:14000 /コンシューマー/こんにちは/ windmt、要求は最終的にルーティングされます インターフェイス。
consumer
/hello
あなたの名前は、このサービスではない場合、消費者は、サービス名であることに注意してください、あなたはあなたのサービス名を変更する必要があります。
学ぶhttps://windmt.com/2018/04/23/spring-cloud-10-zuul-router/