Spring Cloud 学习——网关服务Zuul

柔光的暖阳◎ 2023-07-20 05:33 94阅读 0赞

Spring Cloud Zuul介绍

Zuul是Netflix开源的微服务网关,可以和Eureka、Ribbon、Hystrix等组件配合使用,Spring Cloud对Zuul进行了整合与增强,Zuul默认使用的HTTP客户端是Apache HTTPClient,也可以使用RestClient或okhttp3.OkHttpClient。 Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,如下图所示,/test/*转发到到demo服务。zuul默认和Ribbon结合实现了负载均衡的功能.。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy_size_16_color_FFFFFF_t_70

Zuul使用一系列不同类型的过滤器,使我们能够快速灵活地将功能应用于我们的边缘服务。这些过滤器可帮助我们执行以下功能

  • 身份验证和安全性 - 确定每个资源的身份验证要求并拒绝不满足这些要求的请求
  • 洞察和监控 - 在边缘跟踪有意义的数据和统计数据,以便为我们提供准确的生产视图
  • 动态路由 - 根据需要动态地将请求路由到不同的后端群集
  • 压力测试 - 逐渐增加群集的流量以衡量性能。
  • Load Shedding - 为每种类型的请求分配容量并删除超过限制的请求**静态响应处理 - 直接在边缘构建一些响应,而不是将它们转发到内部集群**

Zuul实现路由转发和过滤器

consumer-zuul子项目搭建

继续在之前的聚合工程中创建子项目,consumer-zuul

项目结构

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy_size_16_color_FFFFFF_t_70 1

pom文件

只需要引入zuul包即可

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
  4. </dependency>

yml配置

  1. server:
  2. port: 13000
  3. eureka:
  4. client:
  5. service-url:
  6. defaultZone: http://eureka01:8800/eureka/,http://eureka02:8810/eureka/
  7. # 构建路由地址
  8. zuul:
  9. routes:
  10. # 这里可以自定义
  11. demo1:
  12. # 匹配的路由规则
  13. path: /consumer-zuul-a/**
  14. # 路由的目标服务名
  15. serviceId: provider
  16. demo2:
  17. # 匹配的路由规则
  18. path: /consumer-zuul-b/**
  19. # 路由的目标服务名
  20. serviceId: consumer-feign
  21. spring:
  22. application:
  23. name: consumer-zuul
  24. main:
  25. allow-bean-definition-overriding: true

启动类

加入注解 @EnableZuulProxy

  1. @SpringBootApplication
  2. @EnableZuulProxy
  3. public class ConsumerZuulApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(ConsumerZuulApplication.class, args);
  6. }
  7. }

启动

同时启动yml对应的服务

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy_size_16_color_FFFFFF_t_70 2

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy_size_16_color_FFFFFF_t_70 3

Zuul实现过滤器

ServiceFilter类

  1. @Component
  2. public class ServiceFilter extends ZuulFilter {
  3. @Override
  4. public String filterType() {
  5. //filterType 为过滤类型,可选值有 pre(路由之前)、routing(路由之时)、post(路由之后)、error(发生错误时调用)。
  6. return "pre";
  7. }
  8. @Override
  9. public int filterOrder() {
  10. //filterOrdery 为过滤的顺序,如果有多个过滤器,则数字越小越先执行
  11. return 0;
  12. }
  13. @Override
  14. public boolean shouldFilter() {
  15. //shouldFilter 表示是否过滤,这里可以做逻辑判断,true 为过滤,false 不过滤
  16. return true;
  17. }
  18. @Override
  19. public Object run() throws ZuulException {
  20. //run 为过滤器执行的具体逻辑,在这里可以做很多事情,比如:权限判断、合法性校验等。
  21. //这里写校验代码
  22. RequestContext context = RequestContext.getCurrentContext();
  23. HttpServletRequest request = context.getRequest();
  24. String name = request.getParameter("name");
  25. if(!"12345".equals(name)){
  26. context.setSendZuulResponse(false);
  27. context.setResponseStatusCode(401);
  28. try {
  29. context.getResponse().setCharacterEncoding("UTF-8");
  30. context.getResponse().getWriter().write("名字错了");
  31. }catch (Exception e){}
  32. }
  33. return null;
  34. }
  35. }

运行

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzU3MjQy_size_16_color_FFFFFF_t_70 4

加入我们

如果有需要,欢迎可以加入我们的QQ群!(QQ搜索 1074281704, 加入我们的QQ群吧!)
有任何问题,也可以加入我们的QQ群,欢迎交(che)流(dan)!

发表评论

表情:
评论列表 (有 0 条评论,94人围观)

还没有评论,来说两句吧...

相关阅读

    相关 spring cloud服务Zuul

    微服务架构讲究系统的高内聚性,即只做该系统该做的事情,而其他的事情可以通过网关去做。spring cloud的zuul可以快速的搭建一个网关系统,其主要功能如下: ![这里