13 Spring Cloud微服务 微服务网关Zuul
一基本概念 当后端有很多的接口,不能通过一个个调用,需要用到网关,提供request的统一入口 服务网关的要素 7*24小时可用,网关瘫痪,系统全挂 。稳定性,高可用 。性能,并发性 。安全性(金融,通信数据的加密) 。扩展性 常见的网关方案 Nginx(性能和高可用是傲视群雄的资本)+Lua kong(基于Nginx二次开发,收费) Tyk (Go语言,并发) Spring Cloud Zuul 混搭:Nginx+Zuul Zuul 的特点 。路由+过滤器 = Zuul 。核心是一系列的过滤器 Zuul的四种过滤器API 。前置(Pre) 。路由(Route) 。后置(Post) 。错误(Error) .custom filters 二 Zuul:路由转发,排除和自定义 新建项目-> Group->com.immoc Artifact->api-gateway Spring Cloud Config-> config Client Spring Cloud Discovery->Eureka Discovery Client Spring Cloud Routing->Zuul Project name: api-gateway ->完成 三代码 @SpringBootApplication @EnableZuulProxy <------------------ public class ApiGatewayApplication { public static void main(String[] args) { SpringApplication.run(ApiGatewayApplication.class, args); } } 三 修改src->resources->bootstrap.yml string: application: name: api-gateway cloud: config: discovery: enabled: true service-id: CONFIG profile: test eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ 因为端口占用,修改端口 Edit Configurations->Configuration->Environment->VM options(-Dserver.port=9000) 访问localhost:9000/produt/product/list localhost:9000/order-test.yml localhost:9000/config/order-test.yml 如何自定义路由 string: application: name: api-gateway cloud: config: discovery: enabled: true service-id: CONFIG profile: dev eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ zuul: routes: myProduct: <--------定义的规则的名字,这个名字随意些,写成aaa也可以 path: /myProduct/** <-----url地址 serviceId: product <-----路由到哪个服务上去 等价于下面 routes: product: /myProduct/** 访问localhost:9000/myProduct/product/list 如何查看所有的路由规则 bootstrap.yml management.security.enabled=false 查看路由localhost:9000/application/routes { /myProduct/**: "product", /config/**: "config", /product/**: "prodcut" } 访问 localhost:9000/product/product/list localhost:9000/myProduct/product/list 希望有些地址不能被访问 zuul: routes: myProduct: path: /myProduct/** serviceId: product #排除某些路由 ignored-patterns: - /product/product/listForOrder <-------------不让访问 - /myProduct/product/listForOrder <-------------不让访问 management: security: enabled: false 访问,已经不能路由了 http://localhost:9000/product/product/listForOrder http://localhost:9000/myProduct/product/listForOrder 如何获取cookie zuul: routes: myProduct: path: /myProduct/** serviceId: product sensitiveHeaders: <----------获取cookie,源码中敏感头的过滤 动态路由(放到 Git上) zuul: routes: myProduct: path: /myProduct/** serviceId: product sensitiveHeaders: ignored-patterns: - /product/product/listForOrder - /myProduct/product/listForOrder #排除某些路由 ignored-patterns: - /**/product/listForOrder management: security: enabled: false