路由转发
创建项目,zuul需要注册进eureka中,所以pom依赖中要加这两个依赖
<!-- zuul路由网关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
启动类上添加@EnableZuulProxy注解,启用zuul,
最后在配置文件中将zuul项目注册到eureka中心,
eureka:
client: #客户端注册进eureka服务列表内
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
instance-id: microservicecloud-zuul-gateway
prefer-ip-address: true #访问路径可以显示IP地址
#注册到Eureka服务的服务名
spring:
application:
name: zuul-service7103
zuul:
routes:
client-a:
path: /client-a/**
serviceId: EUREKA-CLIENT #这里是写其他实例注册到Eureka的名称,不会写各实例的instanceId
clietn-b:
path: /client-b/**
serviceId: eurake-client1-7003
最后,启动eureka,启动服务提供者,zuul项目,不通过网关访问
http://localhost:8001/dept/get/1,可以直接访问,
通过网关:http://localhost:9003/client-a/getData
zuul会把/client-a/开头的请求都转发到EUREKA-CLIENT服务,并且,zuul默认是使用了ribbon负载均衡。
服务过滤
zuul还可以过滤请求,做一些安全验证
需要创建一个类继承ZuulFilter,重写其中的方法
@Component
public class MyFilter extends ZuulFilter {
/**
* 返回一个字符串的过滤器类型,有以下四种
* pre: 路由之前
* routing:路由时
* post:路由之后
* error: 发送错误调用
*
* @return
*/
@Override
public String filterType() {
return null;
}
/**
* 过滤顺序,返回的数据越小,该过滤器优先生效,优先过滤请求
* @return
*/
@Override
public int filterOrder() {
return 0;
}
/**
* 是否需要启用该过滤器,可以按情况是否启用
* @return
*/
@Override
public boolean shouldFilter() {
return false;
}
/**
* 这里写过滤器的过滤逻辑
* @return
* @throws ZuulException
*/
@Override
public Object run() throws ZuulException {
return null;
}
}