SpringCloud组件五之Zuul-网关(G版本)
一.Zuul简介
Zuul是Netflix开源的微服务网关,可以和Eureka、Ribbon、Hystrix等组件配合使用,Spring Cloud对Zuul进行了整合与增强,Zuul的主要功能是路由转发和过滤器。
二.项目现状
一个注册中心(registry),服务提供微服务(provider),消费者(ribbon),消费者(feign)。
三.注册网关服务
POM文件
<?xml version=”1.0” encoding=”UTF-8”?>
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
cn.lll
zuul
0.0.1-SNAPSHOT
zuul
Demo project for Spring Boot
1.8
Greenwich.SR1
org.projectlombok
lombok
1.18.4
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-netflix-zuul
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${ spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
yml配置文件
server:
port: 8084spring:
application:name: zuul-server
eureka:
client:service-url:
defaultZone: http://127.0.0.1:10010/eureka
启动类添加注解
@SpringBootApplication
@EnableEurekaClient
public class ZuulApplication {public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
}
四.开启网关服务
启动类上添加注解
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class ZuulApplication {public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
}
配置文件添加配置
我们的目的在于:127.0.0.1:8084/feign/** 转发到 feign-server服务,以下的两种配置都可以zuul:
routes:FEIGN-SERVER: /feign/** api-a: path: /ribbon/** serviceId: RIBBON-SERVER
五.过滤器
编写自己的Filter类继承ZuulFilter,实现其中的抽象方法,并实例化实体类注入IOC容器。
@Component
@Slf4j
public class MyFilter extends ZuulFilter {/** * filterType表示返回一个字符串代表过滤器的类型 * pre:路由之前 * routing:路由之时 * post: 路由之后 * error:发送错误调用 * @return */
@Override
public String filterType() {
return "pre";
}
/** * 过滤的顺序 * @return */
@Override
public int filterOrder() {
return 0;
}
/** * 是否要过滤,可添加逻辑 * @return */
@Override
public boolean shouldFilter() {
return true;
}
/** * 过滤器的具体逻辑 * @return * @throws ZuulException */
@Override
public Object run() throws ZuulException {
log.info("网关的过滤器正在执行!!!");
return null;
}
}
还没有评论,来说两句吧...