Zuul的主要功能是路由转发和过滤器。zuul默认和Ribbon结合实现了负载均衡的功能。
在SpringCloud中,Zuul是一个独立的微服务,注册进Eureka注册中心,并从Eureka获取其他微服务信息,之后对微服务的调用都会通过Zuul转发。
创建Zuul微服务:cloudZuul
POM:
<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>
启动类:
@SpringBootApplication
@EnableZuulProxy //开启Zuul支持
public class CloudZuul {
public static void main(String[] args) {
SpringApplication.run(CloudZuul.class,args);
}
}
Zuul的启动类中没有添加@EnableEurekaClient注解,但是也能注册进Eureka服务中心中。这是因为@EnableZuulProxy是组合注解。
application.yml:
server:
port: 9001
spring:
application:
name: cloud-zuul
eureka:
client:
service-url:
defaultZone: http://eurekaServer7003:7003/eureka/
instance:
instance-id: cloudZuul-${server.port}dept
prefer-ip-address: true
至此,Zuul微服务创建完成。我们先启动Eureka注册中心和服务提供者查看Eureka管理界面:
访问微服务:http://cloud-provider:8082/provider/get/1234 (需要修改系统的映射文件,Eureka集群配置中有说明)
这时再启动Zuul微服务,刷新Eureka管理界面:
通过路由访问微服务提供者:http://localhost:9001/cloud-provider/provider/get/1234
从路由地址可以看出,Zuul路由地址是由 “Zuul服务地址+微服务地址”,这样也同样会暴露真实的服务名,如果我们要隐藏真实的服务名,需要对Zuul进行配置:
server:
port: 9001
spring:
application:
name: cloud-zuul
eureka:
client:
service-url:
defaultZone: http://eurekaServer7003:7003/eureka/
instance:
instance-id: cloudZuul-${server.port}dept
prefer-ip-address: true
zuul:
prefix: /zsm #设置统一前缀
ignored-services: "*" #隐藏某个微服务真实的代理访问路径,*代表隐藏所有
routes:
mydept.serviceId: cloud-provider #微服务名
mydept.path: /myProxy/** #映射名
这时如果要对我服务进行路由访问的地址为:http://localhost:9001/zsm/myProxy/provider/get/1234
这时由:zuul地址+前缀+服务映射名+方法路径,且原路由访问路径不再起作用。