springcloud 入门 7 (zuul路由网关)

Zuul简介:

  Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能。

    zuul有以下功能:

      • Authentication
      • Insights
      • Stress Testing
      • Canary Testing
      • Dynamic Routing
      • Service Migration
      • Load Shedding
      • Security
      • Static Response handling
      • Active/Active traffic management

Zuul搭建:

  第一步:引入相应的pom

    

  第二步:在启动类上启动zuul

    

  第三步:配置文件配置,向注册中心注册。自身做一个客户端。

    

  第四步:启动测试:  六个服务以此启动,最好先启动服务端,再启动其他客户端

    

    

zuul过滤:

  zuul主要是路由和过滤,上面已经介绍路由,下面介绍过滤。在过滤中类似servlet的过滤器,拦截器。在修改的时候可以做一些二次开发:

 1 package com.huhy.springcloud.filter;
 2 
 3 import com.netflix.zuul.ZuulFilter;
 4 import com.netflix.zuul.exception.ZuulException;
 5 import org.springframework.stereotype.Component;
 6 
 7 /**
 8  * @author : huhy on 2018/9/4.
 9  * @Project_name:springcloud_self
10  * @LOCAL:com.huhy.springcloud.filter
11  * @description:{todo}
12  */
13 @Component
14 public class MyFilter extends ZuulFilter {
15     /**
16      * @author huhy
17      * @ClassName:MyFilter
18      * @date 2018/9/4 13:58 
19      * @Description: 返回一个字符串代表过滤器的类型
20      */
21     @Override
22     public String filterType() {
23         /**
24          *  pre:    路由之前
25          *  routing:路由之时
26          *  post:   路由之后
27          *  error:  发送错误调用
28          * */
29         System.out.println("filterType--------------");
30         return "pre";
31     }
32     /**
33      * @author huhy
34      * @ClassName:MyFilter
35      * @date 2018/9/4 13:59 
36      * @Description: 过滤顺序
37      */
38     @Override
39     public int filterOrder() {
40         System.out.println("filterOrder--------------");
41         return 0;
42     }
43     /**
44      * @author huhy
45      * @ClassName:MyFilter
46      * @date 2018/9/4 13:59 
47      * @Description: 这里可以写逻辑判断,是否要过滤,本文true,永远过滤。
48      */
49     @Override
50     public boolean shouldFilter() {
51         System.out.println("shouldFilter--------------");
52         return true;
53     }
54     /**
55      * @author huhy
56      * @ClassName:MyFilter
57      * @date 2018/9/4 13:59 
58      * @Description:过滤器的具体逻辑。可用很复杂,包括查sql,nosql去判断该请求到底有没有权限访问。
59      */
60     @Override
61     public Object run() throws ZuulException {
62         System.out.println("run--------------");
63         return "run";
64     }
65 }

注意:

  1>feign 和 ribbon也是负载,那么和zuul有啥侧重点呢?

    ribbon的负载在于相同服务之间的负载,zuul多用于在多个服务之间传递请求。 zuul 多以集群的形式存在。   

  2> zuul在springcloud充当的角色(借用网上一张图)

    

原文地址:https://www.cnblogs.com/huhongy/p/9584101.html