(此次创建的Demo小案例都是基于springBoot【2.0.0.M3】,springCloud【Finchley.M2】创建的,读者若是为了演示正常,请务必保持版本一致)
网关一般作为微服务的门面,可以说是非常的重要了,网关主要通过四种过滤器来实现(前置(Pre),路由(Route),后置(Post),错误(Error)),下面我们通过一个简单的小案例来看看Zuul网关的简单使用
1)新建一个项目,勾选如下图圈中的组件
2) 修改我们演示的版本
3)pom文件添加配置,很简单的配置,一个是项目名称,一个是注册中心的地址,一个是项目的端口号
spring:
application:
name: api-gateway
eureka:
client:
service.url:
defaultZone: http://localhost:8761/eureka/
server:
port: 8060
4)启动类添加我们网关注解【@EnableZuulProxy】
5)启动项目,可以看到已经注册在我们的注册中心上了
6)看看如何路由,刚才的注册中心我们可以到有一个product服务,是之前就准备好的,我们product的访问地址是
http://localhost:8080/product/list
通过我们的路由如何进行访问?
可以访问 http://localhost:8060/product/product/list
说明:8060是我们配置文件中指定 的端口号;
第一个product是我们注册中心服务的名字;
第二个product以及后面的list,也就是product/list 是我们实际访问的项目地址,可以看到看也可以顺利访问到,路由成功
7)如何自定义路由?我们的配置文件中需要添加如下配置
#自定义路由
zuul:
routes:
myProduct:
path: /myProduct/**
serviceId: product
#简洁写法
#product: /myProduct/**
依然可以访问
8)如何查看我们所有的配置的路由?配置文件中添加如下配置
#开启我们查看所有路由的权限 ,查看我们所有配置的路由 /application/routes
management:
security:
enabled: false
然后访问 http://localhost:8060/application/routes,可以看到
9)如何不暴露某些服务,使其不允许外部访问?配置如下:
#不暴露访问 的接口,通俗讲就是不可以访问的接口
ignored-patterns:
- /product/product/listForOrder
- /myProduct/product/listForOrder
这样,配置中的路径再次进行访问就会显示404,无法访问
10)关于路由无法携带cookie的问题,我们自定义路由的时候可以添加如下配置即可解决:
#自定义路由
zuul:
routes:
myProduct:
path: /myProduct/**
serviceId: product
#将sensitiveHeaders敏感头设置为空,就不会再过滤cookie,可以解决动态路由无法携带cookie的问题
sensitiveHeaders:
11)如何实现动态路由?
11.1)首先便是将我们的所有路由配置交由我们的统一配置中心管理,做到自动更新配置,关于如何做到自动更新配置可以看【SpringCloud 之 SpringCloud Bus 自动更新配置的使用】
11.2)然后就是虽然我们的配置更新了,我们的代码如何做到也跟着动态的更新?我们可以在我们的启动类上做出如下的修改
@SpringBootApplication
@EnableZuulProxy
public class ApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayApplication.class, args);
}
@ConfigurationProperties("zuul")
@RefreshScope
public ZuulProperties zuulProperties(){
return new ZuulProperties();
}
}