微服务-6 微服务网关Gataway快速使用,令牌桶限流,网关Hystrix容错

微服务网关Gataway
本次涉及到的源码地址:https://gitee.com/langjunnan/nacos-parent-gateway
 
为什么需要微服务网关?
  1.  网关可以帮助我们转发外界的请求,反向代理到微服务每个节点或集群,我们只需要把网关得端口暴漏出去,微服务之间部署在内网当中,加大了架构得安全系数,
  2.  网关可以帮我们做统一得逻辑处理,例如权限验证,规则匹配,规则路由,API监控,请求得限流,容错保护
网关 的快读开始
        这里我们使用的是SpringCloud提供的Gataway网关。因为Zuul的版本不稳定,更新缓慢,所以Spring自己研发了Gataway 功能强大,也很好用
如何集成Gataway网关?
        本次集成Gataway网关我们在现有得 微服务当中做集成 目前我们已经整合过 nacos 注册中心和配置中心,feign调用,ribbon节点负载,服务与服务之间hystrix容错 在原有得父项目上创建一个子项目名称为 nacos-gataway做网关 并增加如下 pom信息
 
<!--注册中心-->
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
   <version>2.2.1.RELEASE</version>
</dependency>
<!--配置中心-->
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
   <version>2.2.1.RELEASE</version>
</dependency>
<!--网关-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-gateway</artifactId>
   <version>${version.spring-cloud-starter}</version>
   <!--version= 2.2.9.RELEASE-->
</dependency>
 
项目创建成功后 如下:
接下来我们编写bootstrap.properties 配置文件做路由转发配置。注意编写 yml文件不要在属性前随意使用空格或者tab
 
配置好了参数,我们启动 nacos-xxxx1.2, nacos-yyyy1.2  微服务项目 最后启nacos-gateway网关,并且访问我们得配置好得网关地址
http://127.0.0.1:8090/feignTest/show  关于这条请求 网关会匹配到 id=nacos-xxxx 得 predicates断言, 匹配成功后会转发到uri =nacos-xxxx上得微服务节点或集群 ,
请求就变成了http://nacos-xxxx/feignTest/show ,接下来我们看看 nacos-xxxx服务里面是如何实现得,如下图:xxxx服务里面调用了yyyy服务,你也可以直接返回一个字符串测试
 
看效果:
gateway提供得内置过滤器
StripPrefix 过滤器 截取请求段落 StripPrefix 过滤器 主要是 路由匹配成功后网关在做转发得时候 舍弃几段前面得请求路径      
配置好了 内置过滤器 我们修改了断言 重启网关 访问 http://127.0.0.1:8090/x/feignTest/show
容错Hystrix过滤器
为了保护我们微服务节点得可用性,不希望在大流量请求下,或某个服务因为自身得配置,处理异常问题,响应缓慢,导致某个服务请求阻塞,并向上传递影响多个服务得雪崩,
gataway默认配置了容错过滤器集成了Hystrix得容错机制 服务隔离,降级,管控,
1.增加pom文件
 
<!--熔断器hystrix-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
   <version>${version.spring-cloud-starter}</version>
   <!--version= 2.2.9.RELEASE-->
</dependency>
 
2增加配置文件
3 增加异常处理类,可以看到 hystrix的容错请求路径是 fallback  所以我们要创建一个fallback控制器来 做统一错误提示
4hystrix容错的机制 调用超时1s钟  我么可以把 nacos-xxxx服务停掉 让hystrix 因为调用超时而容错,我们启动网关服务并且访问 地址 http://127.0.0.1:8090/x/feignTest/show
结果是:
gataway还提供了很多内置过滤器 ,就不一一讲解了
 
如何做限流?
    gateway集成了redis为我们提供了 令牌桶 做限流,
1导入pom文件
<!--令牌桶限流-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
2填写配置文件
 
3查看限流逻辑:
根据ip限流 当前ip最多能访问2个请求因为令牌桶里面最多只能有两个,只有相应完毕后 令牌桶才能释放出来 紧接着可以有新的令牌进入,我们来看一下测试结果:
测试地址:http://127.0.0.1:8090/x/feignTest/show  我们用jmter做的线程组 10个线程同时请求
 
全局过滤器:
只需要按照规则即成GlobalFilter接口 然后注入到Springbean中,就可以被执行
运行结果:
 
posted @ 2022-02-21 16:22  郎小乐  阅读(574)  评论(0)    收藏  举报