1.引入依赖
<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>
2.启动类
在启动类上加上@EnableEurekaClient注解,开启EurekaClient功能;加上@SpringBootApplication注解,表明自己是一个Spring Boot工程;加上@EnableZuulProxy注解,开启Zuul的功能。代码如下:
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class ZuuldemoApplication {
public static void main(String[] args) {
SpringApplication.run(ZuuldemoApplication.class, args);
}
}
3.配置文件
server:
port: 8888
eureka:
client:
serviceUrl:
defaultZone: http://127.0.0.1:8761/eureka/
spring:
application:
name: service-zuul
4.配置Zuul的路由转发策略
4.1 同时指定微服务的serivceId和path
zuul:
routes:
hello1: # 该配置方式中,hello1只是给路由一个名称,可以任意起名。
path: /hello/**
service-id: eureka-client1 # service-id对应服务在注册中心的名称
所有以"/hello/"开头的服务都会被分发到eureka-client1服务
4.2 同时指定path和url
zuul:
routes:
hell2:
path: /hello2/**
url: http://127.0.0.1:8762
这样就将/hello2/**映射到http://127.0.0.1:8762/,一旦使用这种方式不能使用服务降级Hytrix功能和负载均衡Ribbon,在实际开发中这种做法也是不可取的。
4.3 同时指定path和url,并且不破坏Zuul的Hystrix、Ribbon特性
如果你想指定Url,并且想做负载均衡,那么就需要自己维护负载均衡的服务注册列表。首先将ribbon. eureka.enabled改为false,即Ribbon负载均衡客户端不向Eureka Client获取服务注册列表信息。然后需要自己维护一份注册列表,该注册列表对应的服务名为microservice-provider-user(随便起),通过配置microservice-provider-user.ribbon.listOfServers来配置多个复杂均衡的Url。配置信息如下:
zuul:
routes:
user-route:
path: /user/**
service-id: microservice-provider-user
ribbon:
eureka:
enabled: false # 禁用掉ribbon的eureka使用
microservice-provider-user:
ribbon:
listOfServers: localhost:8000,localhost:8001
4.4 自定义微服务访问路径
zuul:
routes:
microservice-provider-user: /user/**
这样设置后,微服务microservice-provider-user就会被映射到/user/,访问方法为:http://localhost:8040/user/
4.5 忽略指定服务路径
zuul:
ignored-services: microservice-provider-user,microservice-consumer-movie
这样可以让Zuul忽略以上两个服务,只代理其他服务。
4.6 忽略所有微服务,只路由指定服务
zuul:
ignored-services: '*' # 使用'*'可忽略所有微服务
routes:
microservice-provider-user: /user/**
这样Zuul只会路由microservice-provider-user
4.7 忽略某些路径
zuul:
ignoredPatterns: /**/admin/** # 忽略所有包括/admin/的路径
routes:
microservice-provider-user: /user/**
4.8 路由前缀
示例1:
zuul:
prefix: /api
strip-prefix: false
routes:
microservice-provider-user: /user/**
访问Zuul的/api/user/路径,请求将会被转发到microservice-provider-user的/api/
示例2:
zuul:
routes:
microservice-provider-user:
path: /user/**
strip-prefix: false
这样访问Zuul的/user/路径,请求将会被转发到microservice-provider-user的/user/
4.9 forward跳转到本地url
zuul.routes.user.path=/user/**
zuul.routes.user.url=forward:/user
4.10 路由配置顺序
如果想按照配置的顺序进行路由规则控制,则需要使用YAML,如果是使用propeties文件,则会丢失顺序。例如:
zuul:
routes:
users:
path: /myusers/**
legacy:
path: /**
上例如果是使用properties文件进行配置,则legacy
就可能会先生效,这样users
就没效果了。