《Loy解说SpringCloud之Zuul》

一、简介

  路由是微服务中不可或缺的一部分,例如/可以路由到我们的web服务下,而/api/order,可以路由到我们的订单服务,/api/product,可以路由到我们的商品服务。Zuul是Netflix公司提供的基于JVM的路由器和服务器端的负载平衡器。

二、Zuul主要解决的问题

  • 动态路由

  • 鉴权

  • 服务迁移

  • 压力测试

三、如何使用Zuul

     3.1  要想将Zuul引入到项目中,可以添加如下jar包的依赖

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

    3.2 配置路由信息

       比如我的项目是想要路由到loy-client,则我的路由配置如下:

zuul:
  routes:
    loy:
      seviceId: loy-client

        由于使用了zuul网关,所以访问的路径为http://localhost:9090/loy-client/test,9090是zuul服务的端口,loy-client是目标调用的服务,test是目标调用服务的接口,返回结果为:

                 

    3.3 配置路由的几种方

  • 配置serviceId
  • 配置path和ur   
  • 配置忽略前缀

四、Zuul Http客户端

Zuul使用的默认Http客户端现在由Apache Http客户端而不是不推荐使用的Ribbon支持RestClient.要使用RestClient或OkHttpClient,设置ribbon.restclient.enable=true或ribbon.okhhttp.enable=true。如果要自定义Apache Http客户端或OK Http客户端,请提供类型为CloseableHttpClient或者Bean OkHttpClient.

 五、注解使用Zuul的两种方式

     5.1 @EnableZuulServer

 如果使用@EnableZuulServer方式使用Zuul,可以运行Zuul服务器而不进行代理,或者选择性地打来代理平台的某些部分,但不会自动添加任何代理过滤器。

 在这种情况下,仍然可以通过配置zuul.routes,来指定进入Zuul服务器的路由,但是没有服务发现,也没有代理,因此将忽略serviceId和Url设置

 

     5.2 @EnableZuulProxy

使用代理方式进行zuul的使用,将会启用代理过滤器。

@EnableZuulProxy注解集成了Ribbon、注册发现、Hystrix 拥有了熔断及负载均衡等功能

@EurekaZuulProxy注解集成了SpringBootActuator,新增了Routes端点,可以通过/routes路径

六、 Zuul原理

                                                    zuul-request-lifecycle.png

 

七、源码分析入口

    7.1 源码的自动配置类

             从zuul相关的starter包下有一个spring.factories文件,从该文件中,可以找到相关的自动配置类,这些自动配置类就是zuul启动时,会自动加载的的配置类。在该文件中包含两个自动配置类,分别是ZuulServerAutoConfigurationZuulProxyAutoConfiguration。原配置文件如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.netflix.zuul.ZuulServerAutoConfiguration,\
org.springframework.cloud.netflix.zuul.ZuulProxyAutoConfiguration

    7.2  ZuulServerAutoConfiguration源码详解

    (1)ZuulProperties 配置属性类

            1) 该类中存在一个内部类ZuulRoute 该类包含了zuul配置路由转发的相关字段

   public static class ZuulRoute {
        private String id;
        // 转发服务路径
        private String path;
        // 转发服务Id
        private String serviceId;
        // 转发url
        private String url;
        // 去除前缀
        private boolean stripPrefix = true;
        // 是否重试
        private Boolean retryable;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值