春の雲高度道路| 7:サービングゲートウェイ(zuul)

簡単な紹介

公式の説明

Zuulは、Netflixのストリーミングアプリケーションのバックエンドへのデバイスやウェブサイトからのすべての要求のためのフロントドアです。エッジ・サービス・アプリケーションとして、Zuulは、動的ルーティング、モニタリング、弾力性及びセキュリティを可能にするために構築されています。また、必要に応じて、複数のアマゾンの自動スケーリンググループへのルート要求する能力を持っています。

要するに、Zuul機器からサイトとバックエンドアプリケーションのドアダイナミックルーティング、監視、弾力性とセキュリティを実現するために設計されたすべての要求に。

 

何がzuulを行うことができます

Zuulは、異なるタイプのフィルタを含む使用し、これらのフィルタは、次のような機能を実現することができます。

  • 認証とセキュリティは、各リソースの認証要件を特定し、要件を満たしていない要求を拒否します。

  • 追跡および監視、私たちのために生産の正確なビューを提供するために、国境で意味のあるデータと統計を追跡します。

  • 動的ルーティング、異なるバックエンド・クラスタに必要に応じて動的ルーティング要求。

  • ストレステストは、徐々にクラスタの性能を評価するために流量を増加します。

  • 負荷制御、要求の種類ごとに割り当てられた容量、及び要求が限界を超えて破棄。

  • 静的応答処理、境界に直接応答を構築し、代わりに内部サービスクラスタに転送

 

なぜゲートウェイがあるはずです

簡単な言葉には、ゲートウェイルーティングおよび転送+要求のフィルタリングです。

記事の冒頭の通り、あなたは簡単なチェックの権限、監査、インターフェイスモニタリング、電流制限、およびログ収集など、サービスゲートウェイ機能にカットのシリーズを完了することができます。しかし、また、自動的にサービスの発見を通じて見つけてコールするために、直接、多くのマイクロサービスを設定するには、configureアドレスとポートに複雑からサービスレジストリ連携、。

これらのサービスは、各下流マイクロの特性は再びそれを行うしている場合は、難易度や作業負荷は想像することができます。したがって、ゲートウェイの重要性は自明であろう。

:詳細は記事を参照することができ、サービスゲートウェイを持っているのはなぜ

 

製品エンジニアリングの作成

 

前の記事でXmall製品の再利用プロジェクト、およびポートは8080で開始します。

 

ゲートウェイプロジェクトを作成します。

 

ポンポン依存

<?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>com.luas.cloud</groupId>
        <artifactId>java-boot-parent-2.1</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../../java-boot-parent-2.1</relativePath>
    </parent>
​
    <groupId>com.luas.xmall</groupId>
    <artifactId>xmall-zuul</artifactId>
    <version>1.0.0-SNAPSHOT</version>
​
    <name>xmall-zuul</name>
    <description>网关服务</description>
​
    <properties>
    </properties>
​
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
​
        <!-- nacos cloud -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
​
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</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>
​
​
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
​
</project>

 

ナコスの設定

spring:
  application:
    name: xmall-zuul
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml
      discovery:
        server-addr: 127.0.0.1:8848

 

ルーティングルール

構成するルーティングルールはでapplication.yml。

server:
  port: 5566
​
​
zuul:
  prefix: /gateway
  sensitive-headers:
  routes:
    product:
      path: /product/**
      service-id: xmall-product
      strip-prefix: true

前記統一プレフィックスプレフィックス、統一効果および経路を同定するための、自動的にフィルタ(CAN zuul.stripプレフィックス= trueに)。ルーティングルールのルートは以下の意味があります。

  • 識別ID、ルールルーティング固有の識別子は、他の特別な意味は、他のコンポーネントに従うルールを使用することができます。

  • パスの先頭に全て「/製品」の代わりにパス、など/製品/ **アリスタイルのパスマッチングルールは、xmall製品サービスに転送されます

  • ストリッププレフィックスこのプレフィックスフィルタリングする真の往路で、濾過など、接頭辞パスに接頭辞をフィルタリングするかどうか、。

この構成により、例えば、訪問のhttp:// localhostを:5566 /ゲートウェイ/製品/ SKU / 1122は、実際の/ SKU / 1122への要求パスxmall製品サービスに転送、ゲートウェイは、製品が除外されています。

オープンゲートウェイ機能

@EnableZuulProxyコメントすることにより、オープンzuulゲートウェイ機能。

package com.luas.xmall.gateway;
​
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
​
@EnableZuulProxy
@SpringBootApplication
public class XmallZuulApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(XmallZuulApplication.class, args);
    }
​
}

ゲートウェイプロジェクトを開始し、ポートは5566です。

ログインにhttp:// localhost:8080 / SKU / 1122、通常表示の製品情報。

訪問のhttp:// localhostを:5566 /ゲートウェイ/製品/ SKU / 1122、まだ通常のディスプレイの製品情報。

zuulゲートウェイルート商品やサービスの成功への要求。

 

認証

前述したように、重要なゲートウェイの役割は、認証です。認証は二つの側面、認証および認証、唯一の簡単な認証で構成されています。

事前認証フィルタを作成します。

zuulはそれぞれ、4つのフィルタに分かれて:

  • 事前に、事前にコールルーティング

  • ルート、コールのルーティング

  • ポスト、コールルーティングの後

  • 呼び出すときにエラー、エラーが発生します

一例として、認証の種類、トークン(クエリタイプ)に対して認証要求プレフィルタを作成します。

package com.luas.xmall.gateway.filter;
​
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
​
import javax.servlet.http.HttpServletRequest;
​
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;
​
@Component
public class PreAuthenticationFilter extends ZuulFilter {
​
    private Logger logger = LoggerFactory.getLogger(getClass());
​
    @Override
    public String filterType() {
        return PRE_TYPE;
    }
​
    @Override
    public int filterOrder() {
        return 0;
    }
​
    @Override
    public boolean shouldFilter() {
        return true;
    }
​
    @Override
    public Object run() throws ZuulException {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
​
        logger.info(String.format("[%s] url process", request.getRequestURL().toString(), request.getMethod()));
​
        String token = request.getParameter("token");
​
        if (StringUtils.isBlank(token)) {
            logger.warn("token is empty");
​
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(401);
​
            try {
                ctx.getResponse().getWriter().write("token is empty.");
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
            }
        }
        
        return null;
    }
}

フィルタ次数を実行するfilterOrder方法戻り、より少数、より前方に配列。

フィルタリング、すなわち実行方法を実行するための論理的な必要性を返すかどうかshouldFilter方法決意方法。ビジネスシーンによると、ロジックの裁量を書きます。

フィルタロジック自体その重要なコースのrunメソッド、として、多くの操作を行います。本実施形態のように、要求からトークン(クエリーパラメータ形式)を撮影し、それを決定し、それに応じて決意と応答です

再起動ゲートウェイプロジェクト、再訪問のhttp:// localhostを:5566 /ゲートウェイ/製品/ SKU / 1122は、次の通り:

コンソール出力要求メソッド、URL情報、およびトークンと警告は空です。

ショー通常の製品情報、// localhostを:? 5566 /ゲートウェイ/製品/ SKU / 1122 = 0000トークン:トークン、再び訪問のhttpを取得し、我々は認可サービスを訪問したとします。

PreAuthenticationFilterが正常に発効した認可要求を聞かせて、不正な要求を傍受。

 

ソース

githubの

https://github.com/liuminglei/SpringCloudLearning/tree/master/07/

gitee

https://gitee.com/xbd521/SpringCloudLearning/tree/master/07/


終了テキスト

 

マイクロチャンネルサーチ[建築家]ギャラクシーは、よりエキサイティングなコンテンツを見つけます。

 

公開された29元の記事 ウォンの賞賛1 ビュー2236

おすすめ

転載: blog.csdn.net/liuminglei1987/article/details/104003890