Zuul(一)网关和路由

Zuul

Zuul是Netlix开源的微服务网关,它可以和Eureka、Ribbon、 Hystrix 等组件配合使用。Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能。

  • 身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。
  • 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。
  • 动态路由:动态地将请求路由到不同的后端集群。
  • 压力测试:逐渐增加指向集群的流量,以了解性能。
  • 负载分配:为每一 种负载类型分配对应容量,并弃用超出限定值的请求。
  • 静态响应处理:在边缘位置直接建立部分响应,从而避免其转发到内部集群。
  • 多区域弹性:跨越AWS Region进行请求路由,旨在实现ELB ( Elastic Load Balancing )使用的多样化,以及让系统的边缘更贴近系统的使用者。

官方来说:不管是来自于客户端(PC或移动端)的请求,还是服务内部调用。一切对服务的请求都会经过Zuu这个网关,然后再由网关来实现鉴权、动态路由等等操作。Zuul就是我们服务的统一入口。

我自己的理解:假如我们的应用有20个微服务,在使用Zuul之前,用户是直接访问微服务的,很不安全,Zuul就是一个网关,把门作用,把所有请求拦截下来,进行分析:做路由、负载均衡、限流(限制用户流量)等工作。
在这里插入图片描述

Spring Cloud对Zuul进行了整合与增强。目前,Zuul 使用的默认HTTP客户端是ApacheHTTP Client,也可以使用RestClient或者okhttp3.0kHttpClient。如果想要使用RestClient,可以设ribbon.restclient.enabled=true;想要使用okhttp3.OkHttpClient,可以设置ribbon.okhttp.enabled=true。

快速入门

引入依赖

   <!--zuul-->
   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
   </dependency>

zuul已经引入了web、hystrix、ribbon的依赖了
在这里插入图片描述

启动

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

配置

我们将符合path规则的一切请求,都代理到url参数指定的地址
本例中,我们将/user-service/** 开头的请求,代理到http://127.0.0.1:8081

server:
  port: 10010
spring:
  application:
    name: gateway
zuul:   # 配置Zuul
  routes: # 配置路由规则,可以是多个
    zuulId:  # 路由id,名字可以任意,但不可重复
      path: /user-service/**   # 用来匹配url,**才是真实路径
      url: http://127.0.0.1:8081  # 这是匹配成功后要访问的路径

测试

启动服务器,这是直接访问user-service正常服务。
在这里插入图片描述
现在通过Zuul路由控制访问,Zuul通过路由转发到user-service。
在这里插入图片描述

简化路由配置

细节1

在快速入门中,我们把路径为user-service的路径同一匹配到了http://localhost:8081中,如果将来服务名称发生变化或者这个服务启动了多台,这里就出现了错误,没有做负载均衡。
所以当zuul接收到请求后,不应该是转发到具体服务的,而是去eureka拉取服务列表,然后做负载均衡,转发到对应的服务中,也就是说我们在配置时,不应该是面向url地址的配置,而是面向服务的路由配置。
此时给zuul服务引入eureka依赖。并且更改配置

<!--eureka-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
server:
  port: 10010
spring:
  application:
    name: gateway
eureka:
  client:
    server-url:
      defaultZone: http://127.0.0.1:10086/eureka
zuul:   # 配置Zuul
  routes: # 配置路由规则,可以是多个
    hehe:  # 路由id
      path: /user-service/**   # 用来匹配url,**才是真实路径
      serviceId: user-service  # 我们把服务的拉取交给eureka,所以不用配url路径了,只需给一个服务id即可,zuul内部引入了ribbon实现负载均衡选取服务
      # url: http://127.0.0.1:8081  # 这是匹配成功后要访问的路径,此时注释掉

细节2-路由映射

路由id,太过随意,而且没有实际意义。一般习惯将路由id写成服务id。因此,提供了一种简化写法key是服务id,值是映射路径。 而这配置方式又太常见了,Zuul默认已经去eureka把所有的服务列表拉取下来,默认为每一个微服务提供一个默认的配置。所以什么都不需要配置了。
此时,如果你想修改映射路径的话就使用 key是服务id,值是映射路径。 这种方式进行修改即可。注意这里是添加操作,你虽然配置了新的映射路径值,但是默认的还在,使用默认的仍然是可以访问的。
那么你可能会问,有些服务,我们虽然是在eureka上注册了,但是只是让其在服务间调用,不用暴露给用户,此时怎么办?使用ignored-service进行配置,这是一个集合。

server:
  port: 10010
spring:
  application:
    name: gateway 
eureka:
  client:
    server-url:
      defaultZone: http://127.0.0.1:10086/eureka
  
# zuul:   # 配置Zuul
#  routes: # 配置路由规则,可以是多个
#    hehe:  # 路由id
#      user-service: /user-service/**  
#		  consumer-service: /consumer-service/**

zuul:
  routes:
    user-service: /user/**  # 添加映射路径值
  ignored-services:   # 配置不用暴露给用户的服务
    - consumer-service

细节3-路由前缀

prefix:表示前缀。
strip-prefix:表示去除前缀。可以在某个服务上配置,也可是全局配置。
前缀配置可以参考

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值