真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringCloud中如何實(shí)現(xiàn)Zuul過濾器

這篇文章將為大家詳細(xì)講解有關(guān)Spring Cloud中如何實(shí)現(xiàn)Zuul過濾器,小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

10年的思南網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整思南建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“思南網(wǎng)站設(shè)計(jì)”,“思南網(wǎng)站推廣”以來,每個客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

Zuul過濾器

過濾器優(yōu)先級

        Spring Cloud為HTTP請求的各個階段,提供了多個過濾器,這些過濾器的執(zhí)行順序,由它們各自提供的一個int值決定,提供的值越小,優(yōu)先級越高。圖7-6展示了默認(rèn)的過濾器,以及它們的優(yōu)先級。

Spring Cloud中如何實(shí)現(xiàn)Zuul過濾器

圖7-6 Spring Cloud自帶的過濾器及優(yōu)先級

        如圖7-6,在routing階段,會優(yōu)先執(zhí)行Ribbon路由的過濾器,再執(zhí)行簡單路由過濾器。

自定義過濾器

        了解過濾器的執(zhí)行順序后,我們編寫一個自定義過濾器。新建過濾類,繼承ZuulFilter,實(shí)現(xiàn)請見代碼清單7-10。

        代碼清單7-10:

        codes\07\03\zuul-gateway\src\main\java\org\crazyit\cloud\filter\MyFilter.java

public class MyFilter extends ZuulFilter {

    // 過濾器執(zhí)行條件
    public boolean shouldFilter() {
        return true;
    }

    // 執(zhí)行方法
    public Object run() {
        System.out.println("執(zhí)行 MyFilter 過濾器");
        return null;
    }

    // 表示將在路由階段執(zhí)行
    public String filterType() {
        return FilterConstants.ROUTE_TYPE;
    }

    // 返回1,路由階段,該過濾將會最先執(zhí)行
    public int filterOrder() {
        return 1;
    }
}

        新建的自定義過濾器,將會在“routing”階段執(zhí)行,優(yōu)先級為1,也就是在routing階段,該過濾器最先執(zhí)行。另外注意shouldFilter方法,過濾最終是否執(zhí)行,由該方法決定,本例返回true,表示訪問任何的路由規(guī)則,都會執(zhí)行該過濾器。為了讓Spring容器知道過濾器的存在,需要對該類進(jìn)行配置,代碼清單7-11為配置類。

        代碼清單7-11:

        codes\07\03\zuul-gateway\src\main\java\org\crazyit\cloud\filter\FilterConfig.java

@Configuration
public class FilterConfig {

	@Bean
	public MyFilter myFilter() {
		return new MyFilter();
	}
}

        啟動集群,訪問網(wǎng)關(guān):http://localhost:8080/test/1,會看到控制輸出:“執(zhí)行 MyFilter 過濾器”。實(shí)際上,訪問任何一個配置好的路由,都會進(jìn)行輸出。

過濾器動態(tài)加載

        相對于集群中的其他節(jié)點(diǎn),網(wǎng)關(guān)更需要長期、穩(wěn)定地提供服務(wù)。如果需要增加過濾器,重啟網(wǎng)關(guān)代價太大,為了解決該問題,Zuul提供了過濾器的動態(tài)加載功能,可以使用Groovy來編寫過濾器,然后添加到加載目錄,讓Zuul去動態(tài)加載。先為網(wǎng)關(guān)項(xiàng)目加入Groovy的依賴:

        
            org.codehaus.groovy
            groovy-all
            2.4.12
        

        接下來,在網(wǎng)關(guān)項(xiàng)目的應(yīng)用類中,調(diào)用Zuul的API來實(shí)現(xiàn)動態(tài)加載,請見代碼清單7-12。

        代碼清單7-12:

        codes\07\03\zuul-gateway\src\main\java\org\crazyit\cloud\GatewayApplication.java

@EnableZuulProxy
@SpringBootApplication
public class GatewayApplication {
	
	@PostConstruct
	public void zuulInit() {
        FilterLoader.getInstance().setCompiler(new GroovyCompiler());
        // 讀取配置,獲取腳本根目錄
        String scriptRoot = System.getProperty("zuul.filter.root", "groovy/filters");
        // 獲取刷新間隔
        String refreshInterval = System.getProperty("zuul.filter.refreshInterval", "5");
        if (scriptRoot.length() > 0) scriptRoot = scriptRoot + File.separator;
        try {
            FilterFileManager.setFilenameFilter(new GroovyFileFilter());
            FilterFileManager.init(Integer.parseInt(refreshInterval), scriptRoot + "pre", 
            		scriptRoot + "route", scriptRoot + "post");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

	}

	public static void main(String[] args) {
		new SpringApplicationBuilder(GatewayApplication.class).properties(
				"server.port=8080").run(args);
	}
}

        在啟動類中,增加了zuulInit方法,使用@PostConstruct進(jìn)行修飾。該方法中,先讀取 “zuul.filter.root”和“zuul.filter.refreshInterval”兩個屬性,分別表示動態(tài)過濾器的根目錄以及刷新間隔,刷新間隔以秒為單位,這兩個屬性,優(yōu)先讀取配置文件的值,如果沒有則使用默認(rèn)值。在配置文件中,可使用下面的配置片斷:

zuul:
  filter:
    root: “groovy/filters”
    refreshInterval: 5

        調(diào)用FilterFileManager的init方法,初始化3個過濾器目錄:pre、route和post。為了測試動態(tài)加載,使用Groovy編寫一個最簡單的過濾器,請見代碼清單7-13。

        代碼清單7-13:codes\07\03\zuul-gateway\src\main\java\groovy\filters\DynamicFilter.groovy

class DynamicFilter extends ZuulFilter {

	public boolean shouldFilter() {
		return true;
	}

	public Object run() {
		System.out.println("=========  這一個是動態(tài)加載的過濾器:DynamicFilter");
		return null;
	}

	public String filterType() {
		return FilterConstants.ROUTE_TYPE;
	}

	public int filterOrder() {
		return 3;
	}
}

        與前面的過濾器一致,同樣繼承ZuulFilter。需要注意的是,本例的過濾器,并沒有一開始放到動態(tài)加載的過濾器目錄中,讀者在測試時,需要先啟動網(wǎng)關(guān)項(xiàng)目,再將DynamicFilter.groovy放到對應(yīng)目錄中。

        完成以上工作后,啟動網(wǎng)關(guān)項(xiàng)目,訪問以下地址:http://localhost:8080/test/crazyit,控制臺中并沒有輸出DynamicFilter的信息。將DynamicFilter.groovy復(fù)制到src/main/java/groovy/filters/route目錄,等待幾秒后,重新訪問以上的地址,可以看到網(wǎng)關(guān)的控制臺輸出如下:

=========  這一個是動態(tài)加載的過濾器:DynamicFilter

關(guān)于“Spring Cloud中如何實(shí)現(xiàn)Zuul過濾器”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。


文章名稱:SpringCloud中如何實(shí)現(xiàn)Zuul過濾器
文章轉(zhuǎn)載:http://weahome.cn/article/jscidd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部