文章目录
1:zull简介
网关是介于客户端(外部调用方比如app,h5)和微服务的中间层。
zuul默认集成了:Ribbon和Hystrix。
Zuul的核心是一系列过滤器,可实现以下功能:
是所有微服务入口,不管是客户端访问微服务还是微服务内部的访问,都要走网关。
安全检测。识别合法的请求,拦截不合法的请求。
监控。在入口处监控,更全面。
动态路由。动态将请求分发到不同的后端集群。
压力测试。可以逐渐增加对后端服务的流量,进行测试。
负载均衡。使用Ribbon实现。
限流。设置每秒的请求上限。
服务熔断。
2:zull搭建
1:创建项目cloud-zuul(springboot)
2:添加pom依赖
zuul网关本身也是一个微服务,需要注册到eureka中,完整依赖如下。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
</dependencies>
3:配置application.yml
server:
port: 81
eureka:
client:
serviceUrl:
defaultZone: http://euk-server-two.com:7000/eureka/
spring:
application:
name: ZUUL-SERVER
# 访问时直接输入 【http://zuul的ip地址:zuul的端口号/eureka客户端app名称/对应方法】,即可访问成功,默认直接实现Ribbon负载均衡
# 如: http://localhost:81/user-consumer/noParamGet 替代 http://localhost:7400/noParamGet
# 网关需要忽略的eureka服务,加上之后会忽略服务名为user-consumer的eureka客户端
#zuul:
# ignored-services: user-consumer
# 带前缀请求 加上之后需在默认访问路径前加指定地址
# 如: http://localhost:81/api/user-consumer/noParamGet 替代 http://localhost:81/user-consumer/noParamGet
zuul:
prefix: /api
routes:
# 以下key值为【eureka服务名】,将访问user-consumer服务的路径变为/consumer
# 如:http://localhost:81/consumer/noParamGet 替代 http://localhost:81/user-consumer/noParamGet
user-consumer: /consumer/**
4:zull路由的四种配置
1:路由到地址
将/service-provider/** 下的请求,映射到http://localhost:8082下
缺点:把路径写死了
zuul:
routes:
service-provider: #路由名称,可以随便写,习惯上写服务名
path: /service-provider/**
url: http://localhost:8082
2:路由到服务
将 /service-provider/** 全部映射到service-provider这个服务下
zuul:
routes:
service-provider: #路由名称,可以随便写,习惯上写服务名
path: /service-provider/**
serviceId: service-provider #服务id
3:路由到服务简写
将 /service-provider/** 全部映射到service-provider这个服务下
zuul:
routes:
service-provider: /service-provider/** #路由名称,可以随便写,习惯上写服务名
4:路由到自己
如果我们希望在访问/client这个接口的时候跳转到当前服务的这个方法上来处理,就需要使用zuul的本地跳转
zuul:
routes:
client-a:
path: /client/**
url: forward: /client
5:主启动类添加@EnableZuulProxy
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}