暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SpringCloud——Zuul网关配置使用

熊猫锋哥哥 2019-11-05
317

一、为什么要使用微服务网关

简单来说,微服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能。在未加入网关时,一般上会在服务外网架设一个负载均衡,如nginx。


二、网关的优缺点

优点:

减少api请求次数

限流

缓存

统一认证

降低微服务的复杂度

支持混合通信协议(前端只和api通信,其他的由网关调用)

……

缺点:

网关需高可用,可能产生单点故障

管理复杂


三、Zuul的介绍

Zuul是Netflix开源的微服务网关,可以和Eureka、Ribbon、Hystrix等组件配合使用,Spring Cloud对Zuul进行了整合与增强,Zuul的主要功能是路由转发和过滤器。

Zuul基于JVM的路由器和服务器端负载均衡器。同时,Zuul的规则引擎允许规则和过滤器基本上用任何JVM语言编写,内置支持Java和Groovy。这个功能,就可以实现动态路由的功能了。当需要添加某个新的对外服务时,一般上不停机更新是通过数据缓存配置或者使用Groovy进行动态路由的添加的。

Zuul的核心一系列的过滤器:

身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。

审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。

动态路由:动态地将请求路由到不同的后端集群。

压力测试:逐渐增加指向集群的流量,以了解性能。

负载分配:为每一种负载类型分配对应容量,并启用超出限定值的请求。

静态响应处理:在边缘位置直接建立部分相应,从而避免其转发到内部集群。


四、Zuul的十种常用使用方式

1、添加依赖

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>


2、application启动类添加Zuul注解

@SpringBootApplication
@EnableZuulProxy
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
}


3、十种Zuul配置方式

3.0、指定微服务路径

server:
port: 8040
spring:
application:
name: microservice-gateway-zuul
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
zuul:
routes:
microservice-provider-user: /user/**
management:
security:
enabled: false


3.1、忽略指定微服务

server:
port: 8040
spring:
application:
name: microservice-gateway-zuul
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
zuul:
ignored-services: microservice-provider-user,microservice-consumer-movie
management:
security:
enabled: false


3.2、忽略所有微服务,只路由指定的微服务

server:
port: 8040
spring:
application:
name: microservice-gateway-zuul
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
zuul:
ignored-services: '*' # 使用'*'可忽略所有微服务
routes:
microservice-provider-user: /user/**
management:
security:
enabled: false


3.3、同时指定微服务的serviceId和对应路径

server:
port: 8040
spring:
application:
name: microservice-gateway-zuul
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
zuul:
routes:
user-route: # 该配置方式中,user-route只是给路由一个名称,可以任意起名。
service-id: microservice-provider-user
path: /user/** # service-id对应的路径
management:
security:
enabled: false


3.4、同时指定path和url

server:
port: 8040
spring:
application:
name: microservice-gateway-zuul
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
zuul:
routes:
user-route: # 该配置方式中,user-route只是给路由一个名称,可以任意起名。
url: http://localhost:8000/ # 指定的url
path: /user/** # url对应的路径。
management:
security:
enabled: false


3.5、同时指定path和URL,并且不破坏Zuul的Hystrix、Ribbon特性

server:
port: 8040
spring:
application:
name: microservice-gateway-zuul
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
zuul:
routes:
user-route:
path: /user/**
service-id: microservice-provider-user
ribbon:
eureka:
enabled: false # 禁用掉ribbon的eureka使用。详见:http://cloud.spring.io/spring-cloud-static/Camden.SR3/#_example_disable_eureka_use_in_ribbon
microservice-provider-user:
ribbon:
listOfServers: localhost:8000,localhost:8001
management:
security:
enabled: false


3.6、为Zuul添加映射前缀1

server:
port: 8040
spring:
application:
name: microservice-gateway-zuul
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
zuul:
prefix: /api
strip-prefix: false
routes:
microservice-provider-user: /user/**
logging:
level:
com.netflix: DEBUG
management:
security:
enabled: false


# 访问Zuul的/api/microservice-provider-user/1路径,请求将会被转发到microservice-provider-user的/api/1,可查看日志打印,有助于理解。





3.7、为Zuul添加映射前缀2

server:
port: 8040
spring:
application:
name: microservice-gateway-zuul
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
zuul:
routes:
microservice-provider-user:
path: /user/**
strip-prefix: false
logging:
level:
com.netflix: DEBUG


management:
security:
enabled: false




# 这样访问Zuul的/user/1路径,请求将会被转发到microservice-provider-user的/user/1,可查看日志打印,有助于理解。


3.8、忽略某些路径

server:
port: 8040
spring:
application:
name: microservice-gateway-zuul
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
zuul:
ignoredPatterns: /**/admin/** # 忽略所有包括/admin/的路径
routes:
microservice-provider-user: /user/**
management:
security:
enabled: false


3.9、本地转发

server:
port: 8040
spring:
application:
name: microservice-gateway-zuul
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
zuul:
routes:
route-name:
path: /path-a/**
url: forward:/path-b
management:
security:
enabled: false


加油!一起学习交流!!!


文章转载自熊猫锋哥哥,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论