摘要:第篇的過濾器的使用一大致介紹我們在學的時候,就有過濾器和攔截器的使用,而同樣也有過濾器的使用,本章節我們指在如何簡單使用。是否執行該過濾器。說明需要過濾說明不要過濾過濾器的具體邏輯。請求的添加服務網關微服務啟動類的過濾器的使用。
SpringCloud(第 021 篇)Zuul 的過濾器 ZuulFilter 的使用
-
一、大致介紹1、我們在學 Spring 的時候,就有過濾器和攔截器的使用,而 Zuul 同樣也有過濾器的使用,本章節我們指在如何簡單使用 ZuulFilter。二、實現步驟 2.1 添加 maven 引用包
2.2 添加應用配置文件(springms-gateway-zuul-filtersrcmainresourcesapplication.yml)4.0.0 springms-gateway-zuul-filter 1.0-SNAPSHOT jar com.springms.cloud springms-spring-cloud 1.0-SNAPSHOT org.springframework.cloud spring-cloud-starter-zuul org.springframework.cloud spring-cloud-starter-eureka
spring: application: name: springms-gateway-zuul-filter server: port: 8215 eureka: datacenter: SpringCloud # 修改 http://localhost:8761 地址 Eureka 首頁上面 System Status 的 Data center 顯示信息 environment: Test # 修改 http://localhost:8761 地址 Eureka 首頁上面 System Status 的 Environment 顯示信息 client: service-url: defaultZone: http://admin:admin@localhost:8761/eureka healthcheck: # 健康檢查 enabled: true instance: prefer-ip-address: true instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}} ##################################################################################################### # 打印日志 logging: level: root: INFO com.springms: DEBUG ##################################################################################################### ##################################################################################################### ribbon: ConnectTimeout: 3000 ReadTimeout: 60000 #####################################################################################################2.3 添加zuul的過濾器類(springms-gateway-zuul-filtersrcmainjavacomspringmscloudfilterPreZuulFilter.java)
package com.springms.cloud.filter; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; /** * zuul 的過濾器。 * * @author hmilyylimh * * @version 0.0.1 * * @date 2017/9/26 * */ public class PreZuulFilter extends ZuulFilter{ private static final Logger Logger = LoggerFactory.getLogger(PreZuulFilter.class); /** * 前置過濾器。 * * 但是在 zuul 中定義了四種不同生命周期的過濾器類型: * * 1、pre:可以在請求被路由之前調用; * * 2、route:在路由請求時候被調用; * * 3、post:在route和error過濾器之后被調用; * * 4、error:處理請求時發生錯誤時被調用; * * @return */ @Override public String filterType() { return "pre"; } /** * 過濾的優先級,數字越大,優先級越低。 * * @return */ @Override public int filterOrder() { return 1; } /** * 是否執行該過濾器。 * * true:說明需要過濾; * * false:說明不要過濾; * * @return */ @Override public boolean shouldFilter() { return false; } /** * 過濾器的具體邏輯。 * * @return */ @Override public Object run() { HttpServletRequest request = RequestContext.getCurrentContext().getRequest(); String host = request.getRemoteHost(); Logger.info("<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); Logger.info("<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); Logger.info("<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); Logger.info(" 請求的host:{} ", host); Logger.info("<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); Logger.info("<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); Logger.info("<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); return null; } }2.4 添加zuul服務網關微服務啟動類(springms-gateway-zuul-filtersrcmainjavacomspringmscloudMsGatewayZuulFilterApplication.java)
package com.springms.cloud; import com.springms.cloud.filter.PreZuulFilter; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; import org.springframework.context.annotation.Bean; /** * Zuul 的過濾器 ZuulFilter 的使用。 * * 注意 EnableZuulProxy 注解能注冊到 eureka 服務上,是因為該注解包含了 eureka 客戶端的注解,該 EnableZuulProxy 是一個復合注解。 * * @EnableZuulProxy --> { @EnableCircuitBreaker、@EnableDiscoveryClient } 包含了 eureka 客戶端注解,同時也包含了 Hystrix 斷路器模塊注解。 * * http://localhost:8150/routes 地址可以查看該zuul微服務網關代理了多少微服務的serviceId。 * * 想看更多關于過濾器的使用的話,請移步源碼路徑:spring-cloud-netflix-core-1.2.7.RELEASE.jar中的org.springframework.cloud.netflix.zuul.filters目錄下; * * @author hmilyylimh * * @version 0.0.1 * * @date 2017/9/26 * */ @SpringBootApplication @EnableZuulProxy public class MsGatewayZuulFilterApplication { public static void main(String[] args) { SpringApplication.run(MsGatewayZuulFilterApplication.class, args); System.out.println("【【【【【【 GatewayZuulFilter微服務 】】】】】】已啟動."); } /** * 即使其它配置都寫好的話,那么不添加這個 Bean 的方法的話,還是不會執行任何過濾的方法; * * @return */ @Bean public PreZuulFilter preZuulFilter() { return new PreZuulFilter(); } }三、測試
/**************************************************************************************** 一、Zuul 的過濾器 ZuulFilter 的使用(正常情況測試): 1、編寫 application.yml 文件,添加應用程序的注解 EnableZuulProxy 配置; 2、修改 PreZuulFilter 的 shouldFilter 方法返回 true 即可,表明要使用過濾功能; 3、啟動 springms-discovery-eureka 模塊服務,啟動1個端口; 4、啟動 springms-provider-user 模塊服務,啟動1個端口(application.yml 文件中的 appname 屬性不去掉的話,測試一是無法測試通過的); 5、啟動 springms-gateway-zuul-filter 模塊服務; 6、新起網頁頁簽,輸入 http://localhost:8215/routes 正常情況下是能看到zuul需要代理的各個服務列表; 7、新起網頁頁簽,然后輸入 http://localhost:8215/springms-provider-user/simple/1 正常情況下是能看到 ID != 0 一堆用戶信息被打印出來,并且該zuul的微服務日志控制臺會打印一堆 PreZuulFilter 打印的日志內容; 8、然后會看到 PreZuulFilter.run 方法中的日志被打印出來,說名確實進入了過濾的方法里面,過濾起作用了; 總結:過濾確實起了作用,那是因為過濾器的配置中 shouldFilter 設置的 true,需要過濾,所以當然會過濾啦,直接 run 方法中的打印信息即可; ****************************************************************************************/ /**************************************************************************************** 二、Zuul 的過濾器 ZuulFilter 的使用(使用過濾器,但是使得過濾的run方法失效): 1、編寫 application.yml 文件,添加應用程序的注解 EnableZuulProxy 配置; 2、修改 PreZuulFilter 的 shouldFilter 方法返回 false 即可,表明不需要使用過濾器; 3、啟動 springms-discovery-eureka 模塊服務,啟動1個端口; 4、啟動 springms-provider-user 模塊服務,啟動1個端口(application.yml 文件中的 appname 屬性不去掉的話,測試一是無法測試通過的); 5、啟動 springms-gateway-zuul-filter 模塊服務; 6、新起網頁頁簽,輸入 http://localhost:8215/routes 正常情況下是能看到zuul需要代理的各個服務列表; 7、新起網頁頁簽,然后輸入 http://localhost:8215/springms-provider-user/simple/1 正常情況下是能看到 ID != 0 一堆用戶信息被打印出來,但是該zuul的微服務日志控制臺并不會打印一堆 PreZuulFilter 打印的日志內容; 8、然后再看,PreZuulFilter.run 方法中的日志不見了,沒有被打印出來,過濾的run方法失效了; 總結:由此可見,PreZuulFilter 的 shouldFilter 設置為 false,過濾器就已經失去效果了; ****************************************************************************************/四、下載地址
https://gitee.com/ylimhhmily/SpringCloudTutorial.git
SpringCloudTutorial交流QQ群: 235322432
SpringCloudTutorial交流微信群: 微信溝通群二維碼圖片鏈接
歡迎關注,您的肯定是對我最大的支持!!!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/70595.html
摘要:但是如果將負載均衡器置于所有服務前便不是一個好主意,會造成瓶頸。服務超時使用的和庫來進行請求。支持以下四種過濾器前置過濾器在將請求發送到目的地之前被調用。通常用于記錄從目標服務返回的響應處理錯誤或審核敏感信息。 showImg(https://segmentfault.com/img/remote/1460000019531578); springcloud 總集:https://ww...
摘要:服務網關的要素穩定性安全性性能,并發性擴展性路由過濾器核心是一系列的過濾器路由配置權限設置這個名稱可以隨便填敏感頭過濾簡潔寫法不對外部訪問代表集合查看所有的路由規則配置的動態注入也可以寫入啟動類中典型應用場景前置過濾器限流鑒權 服務網關的要素 穩定性 安全性 性能,并發性 擴展性Spring Cloud Zuul - 路由+過濾器 - 核心是一系列的過濾器 showIm...
摘要:洞察和監控在邊緣跟蹤有意義的數據和統計數據,以便為我們提供準確的生產視圖。壓力測試逐步增加集群的流量,以評估性能。減少負載為每種類型的請求分配容量,并刪除超過限制的請求。在路由到源之前執行,可以用于身份驗證路由和裝飾請求。 showImg(https://segmentfault.com/img/remote/1460000018826272); 簡介 Zuul是所有從設備和web站點...
摘要:網關以及業務組件將對象存儲到或從獲取對象。二存在問題基于如上微服務的分布式架構如果按照傳統方式,將對象存儲在內存中。微服務架構下共享對象實現說明客戶端請求到,基于管理將對象存儲到,并將生成的返回給客戶端。 一.簡單做一個背景說明1.為說明問題,本文簡單微服務架構示例如下 showImg(https://segmentfault.com/img/bV7U8h?w=818&h=445); ...
閱讀 3718·2021-10-18 13:34
閱讀 2409·2021-08-11 11:15
閱讀 1207·2019-08-30 15:44
閱讀 698·2019-08-26 10:32
閱讀 992·2019-08-26 10:13
閱讀 2068·2019-08-23 18:36
閱讀 1781·2019-08-23 18:35
閱讀 530·2019-08-23 17:10