spring cloud 2.x版本 Zuul路由网关教程
2019-11-18杂谈搜奇网43°c
A+ A-媒介
本文采纳Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3
本文基于前两篇文章eureka-server、eureka-client、eureka-ribbon和eureka-feign的完成。
参考
- eureka-server
- eureka-client
- eureka-ribbon
- eureka-feign
观点
Zuul的主要功用是路由转发和过滤器。路由功用是微效劳的一部分,比方将请求/api/goods转发到商品效劳上、/api/order转发到定单效劳上等。
Zull默许和Ribbon连系完成了负载平衡功用。
建立Zuul工程
1.1 建立sping boot工程:eureka-zuul
1.2 增添pom.xml相干依靠
<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>
1.3 application增添设置信息
spring:
application:
name: eureka-zuul
server:
port: 8400
eureka:
instance:
hostname: localhost
lease-renewal-interval-in-seconds: 5
lease-expiration-duration-in-seconds: 10
client:
service-url:
defaultZone: http://eureka1.server.com:8701/eureka/,http://eureka2.server.com:8702/eureka/,http://eureka3.server.com:8703/eureka/
zuul:
routes:
eureka-ribbon: #对应效劳称号,能够自定义(最好保持一致)
path: /ribbon/*
serviceId: eureka-ribbon #对应效劳称号
eureka-feign:
path: /eureka-feign/*
serviceId: eureka-feign #对应效劳称号
1.4 启动类EurekaZuulApplication增添注解
package spring.cloud.demo.eurekazuul;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@EnableZuulProxy
@SpringBootApplication
public class EurekaZuulApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaZuulApplication.class, args);
}
}
@EnableZuulProxy:开启Zuul网关注解
1.5 启动eureka-zuul效劳
翻开浏览器,离别输入http://localhost:8400/ribbon/sayHello,http://localhost:8400/eureka-feign/feign/sayHello,显现效果离别以下:
能够看到Zuul根据路由转发的设置划定规矩,把/ribbon/的请求转发到eureka-ribbon效劳上,把/eureka-feign/的请求转发到eureka-feign的效劳上。
至此,一个简朴基于Zuul路由网关就搭建完成了。
彩蛋
增添自定义过滤器
Zuul过滤器有四种范例离别是
- pre 路由前
- route 路由时
- post 路由终了
- error 发作错误时
建立自定义过滤器filter
package spring.cloud.demo.eurekazuul.fillter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 简朴filter过滤器
* @auther: maomao
* @DateT: 2019-09-17
*/
public class CommonFilter extends ZuulFilter {
/**
* 在请求被路由之前挪用
* @return
*/
@Override
public String filterType() {
return "pre";
}
/**
* filter实行递次,经由过程数字指定 ,优先级为0,数字越大,优先级越低
* @return
*/
@Override
public int filterOrder() {
return 0;
}
/**
* 是不是实行该过滤器,此处为true,申明须要过滤
* @return
*/
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() throws ZuulException {
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest request = requestContext.getRequest();
//猎取请求参数
String token = request.getParameter("token");
//校验token是不是能够经由过程
if (StringUtils.isNotBlank(token) && token.equals("maomao")) {
requestContext.setSendZuulResponse(true);
requestContext.setResponseStatusCode(200);
requestContext.set("code", 1);
} else {
requestContext.setSendZuulResponse(false);
requestContext.setResponseStatusCode(401);
HttpServletResponse response = requestContext.getResponse();
response.setHeader("content-type", "text/html;charset=utf-8");
requestContext.setResponseBody("网关认证失利,住手路由");
requestContext.set("code", 0);
}
return null;
}
}
将过滤器到场Bean,增添Config类
package spring.cloud.demo.eurekazuul.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import spring.cloud.demo.eurekazuul.fillter.CommonFilter;
/**
* @auther: maomao
* @DateT: 2019-09-17
*/
@Configuration
public class ZuulFilterConfig {
@Bean
public CommonFilter commonFilter() {
return new CommonFilter();
}
}
启动工程
在浏览器离别输入http://localhost:8400/ribbon/sayHello,http://localhost:8400/eureka-feign/feign/sayHello,显现效果以下:
显现效果证实,过滤器已见效。由于过滤CommonFilter中请求输入参入带token=maomao,所以请求被阻拦,Zuul住手转发。
在浏览器中URL中增添token参数,显现以下:
显现效果证实,在token准确的情况下,Zuul转发胜利。
至此,自定义的过滤器就演示完成。
总结
本文要完成了简朴的Zuul路由转发运用。
代码地点
gitHub地点
《Srping Cloud 2.X小白教程》目次- spring cloud 2.x版本 Eureka Server效劳注册中间教程
- spring cloud 2.x版本 Eureka Client效劳提供者教程
- spring cloud 2.x版本 Ribbon效劳发明教程(内含集成Hystrix熔断机制)
- spring cloud 2.x版本 Feign效劳发明教程(内含集成Hystrix熔断机制)
- spring cloud 2.x版本 Zuul路由网关教程
- spring cloud 2.x版本 config分布式设置中间教程
- spring cloud 2.x版本 Hystrix Dashboard断路器教程
- spring cloud 2.x版本 Gateway路由网关教程
- spring cloud 2.x版本 Gateway自定义过滤器教程
- spring cloud 2.x版本 Gateway熔断、限流教程
spring cloud 2.x版本 Gateway动态路由教程
- 写作不容易,转载请说明出处,喜好的小伙伴能够关注民众号检察更多喜好的文章。
- 联系方式:4272231@163.com
未定义标签