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

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

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

瀏覽:4日期: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
相關文章:
主站蜘蛛池模板: 磁粉制动器|张力控制器|气胀轴|伺服纠偏控制器整套厂家--台灵机电官网 | 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | 有源电力滤波装置-电力有源滤波器-低压穿排电流互感器|安科瑞 | 微型气象仪_气象传感器_防爆气象传感器-天合传感器大全 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 石膏基自流平砂浆厂家-高强石膏基保温隔声自流平-轻质抹灰石膏粉砂浆批发-永康市汇利建设有限公司 | 恒温油槽-恒温水槽-低温恒温槽厂家-宁波科麦仪器有限公司 | 瓶盖扭矩仪(扭力值检测)-百科| 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 活动策划,舞台搭建,活动策划公司-首选美湖上海活动策划公司 | 聚丙烯酰胺_厂家_价格-河南唐达净水材料有限公司 | 耐酸泵,耐腐蚀真空泵,耐酸真空泵-淄博华舜耐腐蚀真空泵有限公司 精密模具-双色注塑模具加工-深圳铭洋宇通 | SDI车窗夹力测试仪-KEMKRAFT方向盘测试仪-上海爱泽工业设备有限公司 | 大倾角皮带机-皮带输送机-螺旋输送机-矿用皮带输送机价格厂家-河南坤威机械 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 2025福建平潭岛旅游攻略|蓝眼泪,景点,住宿攻略-趣平潭网 | 冲击式破碎机-冲击式制砂机-移动碎石机厂家_青州市富康机械有限公司 | 深圳诚暄fpc首页-柔性线路板,fpc柔性线路板打样生产厂家 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | ZHZ8耐压测试仪-上海胜绪电气有限公司| 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 右手官网|右手工业设计|外观设计公司|工业设计公司|产品创新设计|医疗产品结构设计|EMC产品结构设计 | 耐酸泵,耐酸泵厂家-淄博华舜耐腐蚀真空泵 | 泡沫消防车_水罐消防车_湖北江南专用特种汽车有限公司 | 硬度计_影像测量仪_维氏硬度计_佛山市精测计量仪器设备有限公司厂家 | 耐磨陶瓷管道_除渣器厂家-淄博浩瀚陶瓷科技有限公司 | 房屋质量检测-厂房抗震鉴定-玻璃幕墙检测-房屋安全鉴定机构 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 科威信洗净科技,碳氢清洗机,超声波清洗机,真空碳氢清洗机 | 派克防爆伺服电机品牌|国产防爆伺服电机|高低温伺服电机|杭州摩森机电科技有限公司 | 二次元影像仪|二次元测量仪|拉力机|全自动影像测量仪厂家_苏州牧象仪器 | 最新范文网_实用的精品范文美文网| 新疆十佳旅行社_新疆旅游报价_新疆自驾跟团游-新疆中西部国际旅行社 | 【直乐】河北石家庄脊柱侧弯医院_治疗椎间盘突出哪家医院好_骨科脊柱外科专业医院_治疗抽动症/关节病骨伤权威医院|排行-直乐矫形中医医院 | 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | 电磁流量计_智能防腐防爆管道式计量表-金湖凯铭仪表有限公司 | 萃取箱-萃取槽-PVC萃取箱厂家-混合澄清槽- 杭州南方化工设备 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 |