一基本概念
当后端有很多的接口,不能通过一个个调用,需要用到网关,提供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