电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Spring Cloud Zuul路由網關服務過濾實現代碼

瀏覽:7日期:2023-09-10 18:49:18

Zuul 簡介

Zuul 的主要功能是路由轉發和過濾器。路由功能是微服務的一部分,比如 /api/admin 轉發到到 Admin 服務,/api/member 轉發到到 Member 服務。Zuul 默認和 Ribbon 結合實現了負載均衡的功能。

引入依賴

在 pom.xml 中主要添加 spring-cloud-starter-netflix-eureka-server 和 spring-cloud-starter-netflix-zuul 依賴

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency>

相關配置

在 application.yml 中主要添加 Zuul 路由配置

zuul: routes: api-a: path: /api/ribbon/** serviceId: hello-spring-cloud-web-admin-ribbon api-b: path: /api/feign/** serviceId: hello-spring-cloud-web-admin-feign

路由說明:

以 /api/ribbon 開頭的請求都轉發給 spring-cloud-web-admin-ribbon 服務以 /api/feign 開頭的請求都轉發給 spring-cloud-web-admin-feign 服務在 Application 入口類中添加 @EnableZuulProxy 注解開啟 zuul 功能

@SpringBootApplication@EnableEurekaClient@EnableZuulProxypublic class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); }}

配置網關路由失敗時的回調

創建 WebAdminFeignFallbackProvider 回調類

/** * 路由 hello-spring-cloud-web-admin-feign 失敗時的回調 */@Componentpublic class WebAdminFeignFallbackProvider implements FallbackProvider { @Override public String getRoute() { // ServiceId,如果需要所有調用都支持回退,則 return '*' 或 return null return 'hello-spring-cloud-web-admin-feign'; } /** * 如果請求服務失敗,則返回指定的信息給調用者 * @param route * @param cause * @return */ @Override public ClientHttpResponse fallbackResponse(String route, Throwable cause) { return new ClientHttpResponse() { /** * 網關向 api 服務請求失敗了,但是消費者客戶端向網關發起的請求是成功的, * 不應該把 api 的 404,500 等問題拋給客戶端 * 網關和 api 服務集群對于客戶端來說是黑盒 * @return * @throws IOException */ @Override public HttpStatus getStatusCode() throws IOException {return HttpStatus.OK; } @Override public int getRawStatusCode() throws IOException {return HttpStatus.OK.value(); } @Override public String getStatusText() throws IOException {return HttpStatus.OK.getReasonPhrase(); } @Override public void close() { } @Override public InputStream getBody() throws IOException {ObjectMapper objectMapper = new ObjectMapper();Map<String, Object> map = new HashMap<>();map.put('status', 200);map.put('message', '無法連接');return new ByteArrayInputStream(objectMapper.writeValueAsString(map).getBytes('UTF-8')); } @Override public HttpHeaders getHeaders() {HttpHeaders headers = new HttpHeaders();// 和 getBody 中的內容編碼一致headers.setContentType(MediaType.APPLICATION_JSON_UTF8);return headers; } }; }}

測試路由訪問

依次運行 EurekaApplication > ServiceAdminApplication > WebAdminRibbonApplication > WebAdminFeignApplication > ZuulApplication 各服務

訪問:http://localhost:8769/api/ribbon/hi?message=zuul

瀏覽器顯示

port : 8763,message : zuul

訪問:http://localhost:8769/api/feign/hi?message=zuul

瀏覽器顯示

port : 8763,message : zuul

至此說明 Zuul 的路由功能配置成功。

使用 Zuul 的服務過濾功能

Zuul 不僅僅只是路由,還有很多強大的功能。比如用在安全驗證方面。

創建服務過濾器

/** * Zuul 的服務過濾演示 */@Componentpublic class LoginFilter extends ZuulFilter { private static final Logger logger = LoggerFactory.getLogger(LoginFilter.class); /** * 配置過濾類型,有四種不同生命周期的過濾器類型 * 1. pre:路由之前 * 2. routing:路由之時 * 3. post:路由之后 * 4. error:發送錯誤調用 * @return */ @Override public String filterType() { return 'pre'; } /** * 配置過濾的順序 * @return */ @Override public int filterOrder() { return 0; } /** * 配置是否需要過濾:true/需要,false/不需要 * @return */ @Override public boolean shouldFilter() { return true; } /** * 過濾器的具體業務代碼 * @return * @throws ZuulException */ @Override public Object run() throws ZuulException { RequestContext context = RequestContext.getCurrentContext(); HttpServletRequest request = context.getRequest(); String token = request.getParameter('token'); if (token == null) { logger.warn('Token is empty'); context.setSendZuulResponse(false); context.setResponseStatusCode(401); try {context.getResponse().getWriter().write('Token is empty'); } catch (IOException e) { } } else { logger.info('OK'); } return null; }}

測試過濾器

訪問:http://localhost:8769/api/feign/hi?message=zuul

網頁顯示

Token is empty

訪問:http://localhost:8769/api/feign/hi?message=zuul&token=1

網頁顯示

port : 8763,message : zuul

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 西门子伺服控制器维修-伺服驱动放大器-828D数控机床维修-上海涌迪 | 鲁尔圆锥接头多功能测试仪-留置针测试仪-上海威夏环保科技有限公司 | 混合生育酚_醋酸生育酚粉_琥珀酸生育酚-山东新元素生物科技 | 中国品牌门窗网_中国十大门窗品牌_著名门窗品牌 | 气动调节阀,电动调节阀,自力式压力调节阀,切断阀「厂家」-浙江利沃夫自控阀门 | 集装袋吨袋生产厂家-噸袋廠傢-塑料编织袋-纸塑复合袋-二手吨袋-太空袋-曹县建烨包装 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 膜结构_ETFE膜结构_膜结构厂家_膜结构设计-深圳市烨兴智能空间技术有限公司 | 异噻唑啉酮-均三嗪-三丹油-1227-中北杀菌剂厂家 | 真石漆,山东真石漆,真石漆厂家,真石漆价格-山东新佳涂料有限公司 | 联系我们老街华纳娱乐公司官网19989979996(客服) | 地图标注|微信高德百度地图标注|地图标记-做地图[ZuoMap.com] | 通风天窗,通风气楼,屋顶通风天窗,屋顶通风天窗公司 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 模温机-油温机-电加热导热油炉-工业冷水机「欧诺智能」 | 柔软云母板-硬质-水位计云母片组件-首页-武汉长丰云母绝缘材料有限公司 | 温控器生产厂家-提供温度开关/热保护器定制与批发-惠州市华恺威电子科技有限公司 | 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 吹塑加工_大型吹塑加工_滚塑代加工-莱力奇吹塑加工有限公司 | 纸箱抗压机,拉力机,脂肪测定仪,定氮仪-山东德瑞克仪器有限公司 | 快速门厂家-快速卷帘门-工业快速门-硬质快速门-西朗门业 | 粉末包装机,拆包机厂家,价格-上海强牛包装机械设备有限公司 | 磁粉制动器|张力控制器|气胀轴|伺服纠偏控制器整套厂家--台灵机电官网 | 比亚迪叉车-比亚迪电动叉车堆垛车托盘车仓储叉车价格多少钱报价 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 层流手术室净化装修-检验科ICU改造施工-华锐净化工程-特殊科室建设厂家 | 飞飞影视_热门电影在线观看_影视大全| 京马网,京马建站,网站定制,营销型网站建设,东莞建站,东莞网站建设-首页-京马网 | 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 | 双齿辊破碎机-大型狼牙破碎机视频-对辊破碎机价格/型号图片-金联机械设备生产厂家 | 药品冷藏箱厂家_低温冰箱_洁净工作台-济南欧莱博电子商务有限公司官网 | 菲希尔X射线测厚仪-菲希尔库伦法测厚仪-无锡骏展仪器有限责任公司 | 生鲜配送系统-蔬菜食材配送管理系统-连锁餐饮订货配送软件-挪挪生鲜供应链管理软件 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 | 艺术涂料_进口艺术涂料_艺术涂料加盟_艺术涂料十大品牌 -英国蒙太奇艺术涂料 | 钢骨架轻型板_膨石轻型板_钢骨架轻型板价格_恒道新材料 | 仿真植物|仿真树|仿真花|假树|植物墙 - 广州天昆仿真植物有限公司 | 哲力实业_专注汽车涂料汽车漆研发生产_汽车漆|修补油漆品牌厂家 长沙一级消防工程公司_智能化弱电_机电安装_亮化工程专业施工承包_湖南公共安全工程有限公司 | 泉州陶瓷pc砖_园林景观砖厂家_石英砖地铺石价格 _福建暴风石英砖 | 喷砂机厂家_自动除锈抛丸机价格-成都泰盛吉自动化喷砂设备 | 杭州|上海贴标机-百科|