吴秀波胡子被剪,生命禅院论坛,成都东站火车时刻表
zuul是netflix提供的一个开源的api网关服务器,springcloud对zuul进行了整合和增强。服务网关zuul聚合了所有微服务接口,并统一对外暴露,外部客户端只需与服务网关交互即可。相对于内部服务而言,能够防止其被外部客户端直接访问而暴露服务的敏感信息,起到了保护作用。除此之外,zuul还可以实现身份认证、数据监控、动态路由等功能。
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <parent> <groupid>com.cf</groupid> <artifactid>sc-parent</artifactid> <version>0.0.1-snapshot</version> </parent> <artifactid>sc-gateway</artifactid> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-zuul</artifactid> </dependency> </dependencies> </project>
package gateway; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.netflix.zuul.enablezuulproxy; @springbootapplication @enablezuulproxy public class gatewayapplication { public static void main(string[] args) { springapplication.run(gatewayapplication.class, args); } }
@enablezuulproxy是@enablezuulserver的超集,@enablezuulproxy包含@enablezuulserver导入的所有过滤器。
@enablezuulproxy使用反向代理,@enablezuulserver不使用任何代理。
server: port: 8088 spring: application: name: sc-gateway eureka: client: serviceurl: defaultzone: http://localhost:8080/eureka/ zuul: routes: sc-provider: /sp/** #将serviceid为sc-provider的服务映射到/sp/**路径
依次启动注册中心sc-eureka、提供者sc-provider、网关sc-gateway,以下是通过zuul访问提供者和直接访问提供者的结果:
zuul: ignored-services: serviceid1,serviceid2 #忽略服务serviceid1,serviceid2
zuul: ignored-services: '*' #*为忽略所有服务,只代理sc-provider服务 routes: sc-provider: /sp/**
zuul: prefix: /yc routes: sc-provider: /sp/**
zuul: routes: sc-provider: path: /sp/** url: http://localhost:8081 #指定服务sc-provider的url,不从eureka注册中心获取。
这种配置方式不会作为hystrixcommand执行,也不会使用ribbon来平衡多个url的负载。要实现这些目标,可以使用静态服务器列表(listofservers)或者指定serviceid。
zuul: routes: sc-provider: path: /sp/** sensitiveheaders: cookie,set-cookie,authorization #将会覆盖全局zuul.sensitiveheaders的值 url: http://localhost:8081
如果要设置全局的敏感header可以设置zuul.sensitiveheaders的值。cookie,set-cookie,authorization为sensitiveheaders的默认值,如果不想设置敏感header,可以把sensitiveheaders设置成空列表:
zuul: routes: sc-provider: path: /sp/** sensitiveheaders: url: http://localhost:8081
zuul: ignoredheaders: header1, header2 #header1和header2将不会传播到其他的微服务中
当@enablezuulproxy和spring boot actuator配合使用时,zuul会暴露一个路由管理端点/routes,通过这个路由端点可以查看到zuul当前映射的路由列表信息。
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency>
management: endpoints: web: exposure: include: 'routes'
依次启动注册中心sc-eureka、提供者sc-provider、网关sc-gateway,然后访问http://www.lhsxpumps.com/_localhost:8088/actuator/routes/details,显示路由列表信息如下:
zuul的核心是一系列过滤器,它们能够在http请求和响应路由期间执行一系列操作。zuul提供了一个框架来动态读取、编译和运行这些过滤器,过滤器之间不直接通信,它们通过对每个请求惟一的requestcontext共享数据。
新建类gateway.filter.myzuulfilter:
package gateway.filter; import javax.servlet.http.httpservletrequest; import com.netflix.zuul.zuulfilter; import com.netflix.zuul.context.requestcontext; import com.netflix.zuul.exception.zuulexception; public class myzuulfilter extends zuulfilter{ /** * 具体执行逻辑 */ @override public object run() throws zuulexception { requestcontext ctx = requestcontext.getcurrentcontext(); httpservletrequest request = ctx.getrequest(); if (request.getparameter("name") != null) { system.out.println("你好," + request.getparameter("name")); } return null; } /** * 判断你该过滤器是否要执行 */ @override public boolean shouldfilter() { return true; } /** * 过滤器执行顺序 */ @override public int filterorder() { return 1; } /** * 过滤器类型 */ @override public string filtertype() { return "pre"; } }
启动类gatewayapplication中添加配置:
@bean public myzuulfilter myzuulfilter(){ return new myzuulfilter(); }
依次启动注册中心sc-eureka、提供者sc-provider、网关sc-gateway,然后访问http://localhost:8088/sp/book/list?name=小明,myzuulfilter过滤器将会执行,控制台输出:你好,小明。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
浅析我对 String、StringBuilder、StringBuffer 的理解
使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)
Springboot整合freemarker 404问题解决方案
引入mybatis-plus报 Invalid bound statement错误问题的解决方法
网友评论