Zuul是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。我们通过Zuul实现动态的路由切换及对服务访问前的一些复杂处理。
目前SpringCloud的版本分为1.x.x和2.xx两种版本。其中1.x.x对应的版本为spring-cloud-starter-zuul,2.x.x版本对应的依赖为spring-cloud-starter-netflix-zuul。由于我的环境用的是2.0.6.RELEASE这个版本,因此需要在pom.xml文件中加入如下依赖:
org.springframework.cloud
spring-cloud-starter-netflix-zuul
增加完成后的整体pom文件内容如下:
4.0.0
com.qlys.gateway
service-gateway
0.0.1-SNAPSHOT
jar
service-gateway
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.6.RELEASE
UTF-8
UTF-8
1.8
Finchley.SR1
org.springframework.cloud
spring-cloud-starter-netflix-zuul
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
由于我是基于第四天的Eureka服务做的,因此会有Eureka客户端的依赖和相关的配置,请大家注意。
依赖增加完成后,修改启动类ServiceGatewayApplication,增加启动Zuul的相关注解@EnableZuulProxy。代码如下:
package com.qlys.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableZuulProxy
@EnableDiscoveryClient
public class ServiceGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceGatewayApplication.class, args);
}
}
代码中的@EnableDiscoveryClient注解为Eureka的客户端注解。
然后修改application.yml配置文件,增加路由的设置,代码如下:
server:
port: 8081
spring:
application:
name: gateway
eureka:
instance:
appname: gateway
prefer-ip-address: true
client:
service-url:
defaultZone: http://localhost:8761/eureka/
zuul:
routes:
security:
path: /security/**
url: http://localhost:8888/security/
logs:
path: /logs/**
url: http://localhost:9999/logs/
以上配置中,zuul为网关相关的配置。zuul.routes参数接收一个map对象,而且要求这个map对象的key值必须为{name}.path和{name}.url。其中{name}为我们自定义的名称,用于配对path和url组合。如果是application.properties文件的配置,内容应该是下面的格式:
zuul.routes.security.path=/security/**
zuul.routes.security.url=http://localhost:8888/security/
配置完成后即可启动程序进行测试。