1. 程式人生 > >springcloud-zuul路由的使用

springcloud-zuul路由的使用

學習使用zuul的原因是現在原有架構的一些功能被拆分為微服務,每個服務可能都需要呼叫其他服務,這樣就會有服務之間的不斷的呼叫,但是還有一個對外提供的介面需要做一些驗證,還有登入等需要做一些驗證,這些功能抽出來作為一個統一的管理端,原來的方式將這些功能單獨作為一個服務,後來發現zuul有類似的功能,所以學習了一下並在專案中進行了使用,這篇文章主要參考了程式猿DD的文章,並對一些已知的事實進行了驗證。最簡單的方式,首先引入以下jar包
<dependencies>
	<dependency>
		<groupid>org.springframework.cloud</groupid>
		<artifactld>spring - cloud - starter - zuul</artifactid>
	</dependency>
</dependencies>
spring-cloud-starter-zuul包中包含了提供執行緒保護以及熔斷處理的spring-cloud-starter-hystrix依賴,提供監控的spring-boot-star七er-actutor依賴以及提供客戶端負載的spring-cloud-starter-ribbon依賴,在主類中配置以下內容:
@EnableZuulProxy
@SpringBootApplication
public class ApiGatewayApplication {
	public static void main(String[] args) {
		SpringApplication.run(ApiGatewayApplication.class, args);
	}
}
配置檔案中提供以下內容
zuul.routes.api-a-url.path=/api-gateway/**
zuul.routes.api-a-url.url=http://localhost:8083/
這樣在請求localhost/api-gateway/api的時候就會轉發到http://localhost:8083/api中去,實現對請求的轉發,更進一步的是實現zuul和Eureka的結合,在zuul服務中繼續新增以下jar包
<dependency>
	<groupid>org.springframework.cloud</groupid>
	<artifactid>spring-cloud-starter-eureka</artifactid>
</dependency>
配置檔案新增以下內容,同時將原配置檔案中的內容註釋掉
spring.application.name = api-gateway
#eureka服務的註冊地址
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka/

#服務一的轉發配置
zuul.routes.api-a.path=/api-a/**
zuul.routes.api-a.serviceId=COMPUTE-SERVICE

#服務二的轉發配置
zuul.routes.api-b.path=/api-b/**
zuul.routes.api-b.serviceId=EUREKA-CONSUMER-RIBBON-HYSTRIX
這樣就可以實現多個服務的請求轉發,這只是請求轉發的過程,請求轉發,但是還需要對一些登入的介面以及對外提供服務的介面做一些過濾的功能,那怎麼去實現呢?就是利用ZuulFilter,底層是基於javax.servlet.Filter,以下的Java程式碼就是實現了對請求引數的過濾
public class AccessFilter extends ZuulFilter {

    /**
     * 過濾器的型別, 它決定過濾器在請求的哪個生命週期中執行。
     * 這裡定義為pre, 代表會在請求被路由之前執行
     * @return
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 過濾器的執行順序。
     * 當請求在一個階段中存在多個過濾器時, 需要根據該方法返回的值來依次執行。
	 * 越小的越先執行
     * @return
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     * 判斷該過濾器是否需要被執行。
     * 這裡我們直接返回了true, 因此該過濾器對所有請求都會生效。
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        Object accessToken = request.getParameter("accessToken");
        if (accessToken == null) {
            //zuul不對空的路由進行路由
            ctx.setSendZuulResponse(false);
            //返回的錯誤碼
            ctx.setResponseStatusCode(401);
            return "請新增token";
        }
        return null;
    }
}

http://localhost:9001/api-b/consumer請求改為http://localhost:9001/api-b/consumer?accessToken=abc這種URL的方式就可以通過,否則就會出現401,如果要實現過濾的生效還需要在主類中增加以下的程式碼,讓其形成能夠執行的bean
	@Bean
	public AccessFilter accessFilter() {
		return new AccessFilter();
	}
如果按照請求的型別進行過濾的時候需要新增以下程式碼
    @Override
    public boolean shouldFilter() {
        String method = RequestContext.getCurrentContext().getRequest().getMethod();
        if ("PUT".equals(method) || "POST".equals(method) || "DELETE".equals(method)) {
            return true;
        }
        return false;
    }
對於跨域問題的解決可以採用以下方式
 
  @Bean
    public CorsFilter corsFilter() {
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        final CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin(ORIGIN);
        config.addAllowedHeader("Origin");
        config.addAllowedHeader("X-Requested-With");
        config.addAllowedHeader("Content-Type");
        config.addAllowedHeader("Accept");
        config.setMaxAge(3600L);
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }

相關推薦

SpringCloud zuul路由配置

步驟一:新建maven module埠8547 <dependencies> <!-- zuul路由閘道器 --> <dependency> &l

springcloud zuul 路由配置規則,path+serviceId,path+url,zuul 正則制定路由規則(轉發記錄)

照搬照抄,記錄一下,方便以後檢視原文地址:http://www.bubuko.com/infodetail-2012976.htmlzuul路由的幾個配置引數1.靜態路由zuul:routes:myroute1:path: /mypath/**url: http://loca

springcloud zuul 路由,攔截過濾請求,前後端分離,session不一致問題

前後端分離,後端需要驗證使用者登入之後才放行,允許請求服務介面。測試中發現有些介面正常,有些介面發到後臺的sessionId不一樣,導致無法獲取到資料。排查後發現,這些請求發請求之前會先發一次options請求,然後才發get/post的請求獲取資料。然後options請求的

springcloud-zuul路由閘道器

路由閘道器(zuul) 在微服務架構中,需要多個基礎的服務治理元件,包括服務註冊與發現、服務消費、負載均衡、斷路器、智慧 路由、配置管理等,由這個基礎元件相互協作,共同組建了一個簡單的微服務系統。一個簡單的微服務系統如下 圖 總結:在Spring Cloud微服務系統中,一種常見的負載均衡方式是,客戶

springcloud-zuul路由網關

實例名 開發人員 控制 com zuul 安全 當前 方式 技術分享 路由網關(zuul) 在微服務架構中,需要多個基礎的服務治理組件,包括服務註冊與發現、服務消費、負載均衡、斷路器、智能 路由、配置管理等,由這個基礎組件相互協作,共同組建了一個簡單的微服務系統。一個簡單的

springcloud-zuul路由的使用

學習使用zuul的原因是現在原有架構的一些功能被拆分為微服務,每個服務可能都需要呼叫其他服務,這樣就會有服務之間的不斷的呼叫,但是還有一個對外提供的介面需要做一些驗證,還有登入等需要做一些驗證,這些功能抽出來作為一個統一的管理端,原來的方式將這些功能單獨作為一個服務,後來發

SpringCloud系列八:Zuul 路由訪問(Zuul 的基本使用、Zuul 路由功能、zuul 過濾訪問、Zuul 服務降級)

定義 頭信息 操作 客戶 response art lB face bubuko 1、概念:Zuul 路由訪問 2、具體內容 在現在為止所有的微服務都是通過 Eureka 找到的,但是在很多的開發之中為了規範微服務的使用,提供有一個路由的處理控制組件:Zuul,也就是說 Z

springCloud學習- 路由網關(zuul)

審查 ces 2.3 雲平臺 efault apache 1.0 驗證 我們 1、zuul簡介   1.1、zuul是什麽    zuul 是netflix開源的一個API Gateway 服務器, 本質上是一個web servlet應用。   Zuul 在雲平臺上提供動態

SpringCloud路由網關zuul(五)

text 需要 -s eid insight 發送 互調 req 入口 在微服務架構中,需要幾個基礎的服務治理組件,包括服務註冊與發現、服務消費、負載均衡、斷路器、智能路由、配置管理等,由這幾個基礎組件相互協作,共同組建了一個簡單的微服務系統。一個簡答的微服務系統如下圖:

微服務SpringCloudZuul路由端點

zuul的路由端點 當@EnableZuulProxy與Spring Boot Actuator配合使用時,Zuul會暴露一個路由管理 端點/routes。藉助這個端點,可以方便、直觀地檢視以及管理Zuul的路由。 /routes端點的使用非常簡單。使用GET方法訪問該端點,即可返回

springCloud 學習第五篇——構建zuul路由

建立一個簡單的spring-boot專案; 專案目錄: 一:pom.xml; <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.

SpringCloud git資源倉庫用法和Zuul路由

網址:https://github.com/ 配置中心 原理: github上的配置,名為School-dev.yml spring: application: name: userClient datasource: driver-class-na

springcloudzuul路由閘道器

一:是什麼 Zuul包含了對請求的路由和過濾兩個功能: -路由:將外部請求轉發到具體的微服務例項上,是實現外部訪問統一入口的基礎 -過濾:對請求的處理過程進行干預,是實現請求校驗、服務聚合等功能的基礎 注意:Zuul服務最終會被註冊進Eureka中 Zuul提供=代

SpringCloud(七)Zuul路由閘道器

1、Zuul概述 1.1、什麼是服務閘道器? 服務閘道器是在微服務前邊設定一道屏障,請求先到服務閘道器,閘道器會對請求進行過濾、校驗、路由等處理。有了服務閘道器可以提高微服務的安全性,校驗不通過的請求將被拒絕訪問。 前邊介紹的Ribbon客戶端負載均衡技術可以不用經過閘道器,因為通常使用

springcloud系列—Zuul—第5章-2: Spring Cloud Zuul 路由詳解

資料參考:《Spring Cloud 微服務實戰》 目錄 路由詳解 傳統路由配置 服務路由配置 服務路由的預設規則 自定義路由對映關係 路徑匹配 忽略表示式 路由字首 本地跳轉 cookie與頭資訊 重定向問題 路由詳解 傳統路由配置

springcloud----Zuul動態路由

前言 Zuul 是Netflix 提供的一個開源元件,致力於在雲平臺上提供動態路由,監控,彈性,安全等邊緣服務的框架。也有很多公司使用它來作為閘道器的重要組成部分,碰巧今年公司的架構組決定自研一個閘道器產品,集動態路由,動態許可權,限流配額等功能為一體,為其他

SpringCloud學習系列之七 ----- Zuul路由閘道器的過濾器和異常處理

前言 在上篇中介紹了SpringCloud Zuul路由閘道器的基本使用版本,本篇則介紹基於SpringCloud(基於SpringBoot2.x,.SpringCloud Finchley版)中的路由閘道器的過濾器Filter以及異常處理的教程。 SpringCloud Zuul Filter 介紹 過濾器

api-gateway實踐(13)新服務網關 - SpringCloud Zuul

pan ont 智能路由 比較 網關 span 較差 方式 差異 一、兩種方式 1、原生zuul擴展 2、SpringCloud Zuul 二、比較差異 1、心跳檢測(欠缺) 2、斷路保護(欠缺) 3、智能路由(簡單) 4、監控方式(待研究)api-gateway實踐(13

Spring Cloud(八)Zuul路由閘道器

文章目錄 1 概述 1.1 什麼是Zuul 1.2 為什麼要建造Zuul 1.3 Zuul有哪些功能 1.4 理解 2 Zuul路由功能 2.1 建立zuul服務 2.2 測試 2

springcloud zuul 彙總swagger文件

系統是用zuul作為分散式系統的閘道器,同時使用swagger生成文件,把整個系統的文件整合在同一個頁面上。 專案結構 eureka-server:eureka服務註冊中心,埠8080, zuul-server:zuul閘道器,埠8081 payment-server:支