導入
Zuulは、Netflix JVMベースのルーターとサーバー側のロードバランサーです。最も一般的に使用されるシナリオは、フロントエンドUIアクセスのためにNGINXリバースプロキシバックエンドマイクロサービスを置き換えることです。
Zuulはリボンを使用して発見によって転送されるインスタンスを見つけます。すべてのリクエストはHystrixコマンドで実行されるため、障害はHystrixメトリックに表示されます。
注:ZuulにはDiscoveryクライアントが含まれていないため、サービスIDベースのルートの場合、クラスパスでルートの1つを提供する必要があります。
Zuulは、Spring Cloudが提供するAPIゲートウェイとフィルタリングコンポーネントです。次の機能を提供します。
このチュートリアルでは、Zuulを使用してWebリクエスト/製品を対応する製品サービスに転送し、Zuulが転送されたかどうかを確認するために事前フィルターを定義します。
基本環境
プロジェクトソースコード
ここをクリック
Zuulサービスを作成します
IntellijでMavenプロジェクトを作成する:
次に、pom.xmlに次のコードを追加します。
<?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 <http://www.w3.org/2001 xsi:schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.0.sdsd"> <modelversion> 4.0.0 </modelversion> <artifactid> apigateway </artifactid> <バージョン> 1.0-snapshot </version> <parent> <parent> <parent> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter- parent </artifactid> <バージョン> <groupid> org.springframework.cloud </groupid> <! - 名前が変更されました:Spring-Cloud-Starter-Zuul-> <Artifactid> Spring-Cloud-Starter-Netflix-Zuul </artifactid> <artifactid> spring-cloud-starter-netflix-eureka-client </artifactid> </dependency> <dependency> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-config </artifactid> </depence> <artifactid> spring-boot-starter-actuator </artifactid> </dependency> <dependency> groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> </dependency> </dependency> dependency> <dependency> <despency> <despency> <depency> <depency> <depency> <Dependency> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-dependencies </artifactid> <version> finchley.m9 </version> <type> pom </type> <scope> Import </scope> </dependency> </dependency> </dependencymanagement <build> <Plugins> <Plugin> <GroupId> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </artifactid> </blagins> </build> <repositories> <propotion> <id> spring-milestones </id> <name </name </name> <url> https://repo.spring.io/libs-milestone </url> <snapshots> <Enapshots> false </enabled> </snapshots> </repository> </repository> </repository> </repository> </repositories> </project>
春の公式ウェブサイトのチュートリアルで与えられたZuulのArtifactidは、Zuulの古いバージョンの名前であるSpring-Cloud-Starter-Zuulであることに注意する必要があります。 Finchley.m9バージョンでSpring-Cloud-Starter-Netflix-Zuulと改名されました。
src/main/resources/bootstrap.ymlファイルを追加し、spring.application.nameを指定します:
春:アプリケーション:名前:Zuul-Server
cn.zxuqian.applicationクラスを作成します。
package cn.zxuqian;import cn.zxuqian.filters.PreFilter;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.netflix.zuul.enablezuulproxy; Import org.springframework.context.annotation.bean;@enablezuulproxy;@enablezuulproxy@enablediscoveryclient@springbootapplicationpublic class application {public void main(String [] args.run); } @bean public prefilter prefilter(){return new Prefilter(); }}ここでは、@enablezuulproxyを使用して、Zuulを使用して逆プロキシを指定し、リクエストを対応するサーバーに転送します。その後、ユーレカのサービス発見が有効になりました。 Zuulはデフォルトでロードバランシングにリボンを使用するため、Eurekaを通じて登録サービスを見つけることができます。 Prefilterは、リクエストリクエストが処理される前にいくつかの操作を実行する予定体です。そのコードは次のとおりです。
パッケージcn.zxuqian.filters; import com.netflix.zuul.zuflilter; Import com.netflix.zuul.context.requestContext; import com.netflix.zuul.exception; javax.servlet.http.httpservletrequest; public class prefilter extends zulfilter {private static logger log = oggeractory.getLogger(prefilter.class); @Override public String filterType(){return "pre"; } @Override public int filterOrder(){return 1; } @Override public boolean sefsfilter(){return true; } @Override public object run()throws zuulexception {requestContext ctx = requestContext.getCurrentContext(); httpservletrequest request = ctx.getRequest(); log.info(string.format( "%sメソッドリクエスト%s"、request.getMethod()、request.getRequesturl()。toString())); nullを返します。 }} FilterType- Zuul、Pre、Route、Post、およびエラーには、4つの組み込みフィルタータイプがあります。
filterorder-フィルターが実行される順序を指定します。
Filtter-このフィルターを有効にするかどうか。
実行 - フィルターのビジネスロジック。ここでは、要求方法とReqeustのリクエストパスをログするだけです。
次に、構成センターのgitリポジトリにzuul-server.ymlファイルを作成し、次の構成を追加します。
サーバー:ポート:8083ZUUL:ルート:製品:PATH: /製品 /** ServiceID:Product-Service
ここでは、Zuulポートは8083に設定されており、すべて /製品 /リクエストが製品サービスサービスにマッピングされます。 ServiceIDが構成されていない場合、製品キーはデフォルトでServiceIDになります。この例では、serviceIDには - を含むため、ServiceIDは以下に指定されています。構成が完了した後にGITに送信します。
製品サービスを更新します
ProductserviceのURIは、レストスタイルに沿ってそれをより一致させるために少し変更されました:
@RequestMapping( " /list")public string crowtlist(){log.info( "アクセス /製品エンドポイント"); 「コート、ジャケット、セーター、Tシャツ」を返します;}ここでは、@RequestMappingを一致させるパスが /リストに変更されます。これは以前 /製品でした。
Webクライアントを更新します
WebクライアントのProductserviceに新しい方法を追加します。
public string crowtlistzuul(){return this.resttemplate.getForObject( "http:// zuul-server/product/list"、string.class);}今回は、Zuul-Serverサービスを直接リクエストし、製品サービスサービスにリクエストを紹介します。最後に、ProductControllerにリクエスト処理方法を追加します。
@RequestMapping( "/product/list")public string productlistzuul(){return productervice.productlistzuul();}プロセス /製品 /リストリクエストに使用し、Productserviceクラスのメソッドを呼び出すために使用されます。
テスト
MVN Spring-Boot:実行してConfigServer、Registry、Zuulserver、Productservice、およびWebプロジェクトを開始し、2番目のProductserviceを起動し、Server_Port = 8082 Spring-Boot:runを使用します。
http:// localhost:8080/product/listに数回アクセスしてください。ブラウザで返された結果を見ることに加えて、Zuulserverのコマンドラインウィンドウに次の単語も表示されます。
メソッドリクエストhttp:// xuqians-imac:8083/product/listを取得します
次に、2つのProductservicesのコマンドラインウィンドウで、ランダムな外観も表示されます
/製品のエンドポイントへのアクセス
これは、Zuulserverもバランスを自動的にロードすることを意味します。
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。