まず、Zuulは何ですか
マイクロゲートウェイサービスシステムコンポーネントとしてZuul。Zuulが後端に到達して行くのデバイスやサイトの要求から来るすべては、国境サービスを構築するため、ダイナミックルーティング、フィルタリング、監視、セキュリティ、および弾性ストレッチに取り組んでいます。認証とセキュリティ、パフォーマンステスト、ダイナミックルーティング、ストレステスト、負荷分散、リソースは、静的な取り扱い:Zuulは、基礎となるフィルタのさまざまな方法を使って達成しました。
Zuulとnginxの間の第二、違い
- 同じポイント
Zuulとnginxのは、効果のゲートウェイを達成するために、フィルタの要求、(真のIPアドレスを非表示にする)リバースプロキシ、ロードバランシングを実現することができます
- 異なる点
Nginxは:C言語の開発、サーバーの負荷分散の使用
Zuul:Java開発、ユーレカ+リボンがロードバランシングを実現使用。
比較的Zuulは、より強力なNging、nginxのは、スクリプト言語の一部を統合することができます。
三、Zuul学習
3.1、デモのビルド
Zuul学習は、最後の章で工学に基づいて構築されています
- Mavenの
<親> <たartifactId>クラウド親</たartifactId> <groupIdを> com.yk </ groupIdを> <バージョン> 0.0.1-SNAPSHOT </バージョン> </親> <modelVersion> 4.0.0 </ modelVersion> <たartifactId> springcloud-zuul </たartifactId> <依存性> <依存> <groupIdを> org.springframework.cloud </ groupIdを> <たartifactId>春・クラウド・スターター・ネットフリックス - ユーレカ・クライアント</たartifactId> </依存関係> <依存> <groupIdを> org.springframework.cloud </ groupIdを> <たartifactId>ばねクラウドスタータのNetflix-zuul </たartifactId> </依存関係> </依存関係>
- application.properties
## Zuulプロキシアプリケーション spring.application.name =春-クラウドzuul ##サービスポート server.port = 6060 #設定ユーレカ eureka.client.serviceUrl.defaultZone =のhttp:// localhostを:1234 /ユーリカ/ eureka.instance.hostname = localhostを eureka.instance.prefer-IPアドレス=真 eureka.instance.instance-ID = $ {spring.cloud.client.ipアドレス} $ {}はserver.port #設定zuulルーティングルール指定されたバネ - クラウドAPIクライアントのhttp:// localhostを:6060 / API-プロバイダ/ * =>のhttp:// localhostを:802 zuul.routes.spring-クラウドAPI-クライアント= / APIクライアント/ ** #Ribbon負荷分散の設定 春 - クラウドAPI-client.ribbon.listOfServers =のhttp:// locahost:802 #指定されたサービスを無視 #zuul.ignored-サービス=春 - クラウドAPI-クライアント
- ブートエントリ
@EnableZuulProxy @SpringBootApplication(= DataSourceAutoConfiguration.classを除外) @EnableDiscoveryClient パブリッククラスZuulApplication { パブリック静的無効メイン(文字列[] args){ SpringApplication.run(ZuulApplication.class、引数)。 } }
- デモデモ
- 実行スケッチ
3.2 ZuulFilter
- 作成RequestFilter
輸入com.netflix.zuul.ZuulFilter。 輸入com.netflix.zuul.exception.ZuulException。 インポートのjavax.servlet.http.HttpServletRequest; 輸入com.netflix.zuul.context.RequestContext; パブリッククラスRequestFilterはZuulFilterを{延び ここでは、ロジックの処理// @オーバーライド パブリックオブジェクトの実行()は{ZuulExceptionをスローします RequestContextのCTX = RequestContext.getCurrentContext()。 HttpServletRequest request = ctx.getRequest(); System.out.println(String.format( request.getMethod(), request.getRequestURL().toString())); // 对该请求进行路由 ctx.setSendZuulResponse(true); ctx.setResponseStatusCode(200); // 设值,让下一个Filter看到上一个Filter的状态 ctx.set("isSuccess", true); return null; } // 前置过滤器 @Override public String filterType() { return "pre"; } /** * 优先级为0,数字越大,优先级越低 */ @Override public int filterOrder() { return 0; } //是否执行该过滤器 false为不执行 @Override public boolean shouldFilter() { return true; } }
- 入口类增加RequestFilter Bean
@Bean public RequestFilter requestFilter(){ return new RequestFilter(); }