文章目录

  • 概述
  • 路由配置
    • 1.忽略指定的微服务
    • 2.自定义微服务的访问路径
    • 3.忽略所有微服务,只用路由指定微服务
    • 4.同时指定微服务的serviceId和对应路径
    • 5.同时指定微服务的URL和对应路径
    • 6.同时指定微服务的URL和对应路径,并且不破坏Zuul的Hystrix 、Ribbon特性
    • 7.使用正则表达式指定Zuul的路由匹配规则
    • 8.设置路由前缀
    • 9.忽略某些路径
  • 小提示

概述

Spring Cloud【Finchley】-14 微服务网关Zuul的搭建与使用中我们搭建了zuul的微服务,对所有注册在Eureka Server上的服务进行了代理。 当然了,zuul也支持更加细粒度的支持,比如对某些特定的微服务,或者特定的URL等,这里我们继续来学习下zuul更加丰富的路由配置。

官方指导: https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#netflix-zuul-reverse-proxy


路由配置

1.忽略指定的微服务

在application.yml中通过 zuul.ignored-services属性指定忽略的微服务 ,多个服务使用,分隔

zuul:ignored-services: microservice-provider-user,micorservice-consumer-movie-ribbon

测试下:

  1. 启动注册中心Eureka Server 项目 microservice-discovery-eureka
  2. 启动服务提供者micorservice-provider-user
  3. 启动服务消费者 micorservice-consumer-movie-ribbon
  4. 启动zuul网关microservice-gateway-zuul

访问zuul的端口 http://localhost:4534/microservice-provider-user/user/2

同时查看 http://localhost:4534/actuator/routes

说明配置生效了。


2.自定义微服务的访问路径

在application.yml中通过配置zuul.routes.微服务的ServiceId :指定路径

zuul:routes: microservice-provider-user: /userprovider/**

这样microservice-provider-user就会被映射到/userprovider/**路径

测试一下:

  1. 启动注册中心Eureka Server 项目 microservice-discovery-eureka
  2. 启动服务提供者micorservice-provider-user
  3. 启动服务消费者 micorservice-consumer-movie-ribbon
  4. 启动zuul网关microservice-gateway-zuul

先访问 http://localhost:4534/microservice-provider-user/user/4

再放问下设置的映射路径: http://localhost:4534/userprovider/user/4

发现两个路径都可以访问的通,那我们看下zuul的路由映射呢

http://localhost:4534/actuator/routes

格式化如下:


3.忽略所有微服务,只用路由指定微服务

如果只想让zuul代理指定的微服务,可以将zuul.ignored-services设置为'*' ,然后再routes中设置指定的微服务

zuul:ignored-services: '*'routes: microservice-provider-user: /userprovider/**

测试一下:

  1. 启动注册中心Eureka Server 项目 microservice-discovery-eureka
  2. 启动服务提供者micorservice-provider-user
  3. 启动服务消费者 micorservice-consumer-movie-ribbon
  4. 启动zuul网关microservice-gateway-zuul

访问下映射后的路径,

那试试原来的地址还能访问吗?
http://localhost:4534/microservice-provider-user/user/4

看下 zuul的路由情况 http://localhost:4534/actuator/routes

发现原来的地址没有被zuul代理, ignored-services: ‘*’ 生效了。


4.同时指定微服务的serviceId和对应路径

效果同效果同自定义微服务的访问路径 ,只不过这里用的是电影微服务

zuul:routes:movie-route:  # 该配置方式中,这个名称是路由名称,可自定义service-id: micorservice-consumer-movie-ribbonpath: /movie/**  #与service-id对应的微服务的路径

测试下:

  1. 启动注册中心Eureka Server 项目 microservice-discovery-eureka
  2. 启动服务提供者micorservice-provider-user
  3. 启动服务消费者 micorservice-consumer-movie-ribbon
  4. 启动zuul网关microservice-gateway-zuul

zuul的路由情况:

访问 movie微服务映射后的地址 http://localhost:4534/movie/movie/2


5.同时指定微服务的URL和对应路径

zuul:routes:movie-route:  # 该配置方式中,这个名称是路由名称,可自定义url: http://localhost:7902/ # 指定的url  7902 为 该微服务的启动端口path: /movie/**  #与service-id对应的微服务的路径

如上配置可以实现将/movie/** 映射到 http://localhost:7902/**

测试

  1. 启动注册中心Eureka Server 项目 microservice-discovery-eureka
  2. 启动服务提供者micorservice-provider-user
  3. 启动服务消费者 micorservice-consumer-movie-ribbon
  4. 启动zuul网关microservice-gateway-zuul

zuul的路由情况:

访问 movie微服务映射后的地址:

但是这种配置方式的路由不会作为HystrixCommand执行,同时不能使用Ribbon来负载均衡多个URL。 可以使用下面的的配置来使用Zuul的Hystrix 、Ribbon特性


6.同时指定微服务的URL和对应路径,并且不破坏Zuul的Hystrix 、Ribbon特性

方式一:

根据官网的指导,我们来改造下

zuul:routes:movie-route:  # 该配置方式中,这个名称是路由名称,可自定义service-id: micorservice-consumer-movie-ribbonpath: /movie/**  #与service-id对应的微服务的路径ribbon:eureka:enabled: false # 为Ribbon禁用Eurekamicorservice-consumer-movie-ribbon:  # 上面的service-idribbon:listOfServers: http://localhost:7901,http://localhost:7902

方式二:


7.使用正则表达式指定Zuul的路由匹配规则

@Bean
public PatternServiceRouteMapper serviceRouteMapper() {return new PatternServiceRouteMapper("(?<name>^.+)-(?<version>v.+$)","${version}/${name}");
}

看下 PatternServiceRouteMapper

构造函数两个参数 servicePattern 和 routePattern

  • servicePattern 微服务正则
  • routePattern 路由正则

上述的规则含义是 将 microservice-provider-user-v1这种微服务,映射到/v1/microservice-provider-user/**这个路径


8.设置路由前缀

示例一:

zuul:prefix: /apistrip-prefix: falseroutes:microservice-provider-user: /userprovider/**

microservice-provider-user的控制层增加如下方法用作测试

访问 : http://localhost:4534/api/userprovider/3

访问zuul的 http://localhost:4534/api/userprovider/3 被转发到 microservice-provider-user的 /api/{id} 方法 。

查看zuul的路由规则 http://localhost:4534/actuator/routes


示例二:

zuul:routes:microservice-provider-user:  # 微服务的serviceIdpath: /user/**strip-prefix: false

访问zuul的 /user/2 将被转发到microservice-provider-user的/user/2

microservice-provider-user日志:

查看下zuul的路由 http://localhost:4534/actuator/routes


9.忽略某些路径

如果需要更加细粒度的路由控制,比如想让zuul代理某个服务,同时又想保护该微服务的某些敏感路径,这个时候 ignored-patterns属性就派上用场了。

zuul:routes:microservice-provider-user:  /userprovider/**ignored-patterns: /**/admin/**  # 忽略包含admin的路径

小提示

如果想看更多zuul的转发细节,请将 com.netflix包的日志设置为debug级别。

application.yml中增加

logging:level:com.netflix: DEBUG  # 将 com.netflix包的日志级别设置为debug

举个例子:

server:port: 4534spring:application:name: microservice-gateway-zuuleureka:client:service-url:defaultZone: http://artisan:artisan123@localhost:8761/eurekainstance:instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}#actuator  启用所有的监控端点 “*”号代表启用所有的监控端点,可以单独启用,例如,health,info,metrics
#  spring boot 升为 2.0 后,为了安全,默认 Actuator 只暴露了2个端点,heath 和 info
management:endpoints:web:exposure:include: "*" endpoint:health:show-details: ALWAYSzuul:prefix: /apistrip-prefix: falseroutes:microservice-provider-user: /userprovider/**logging:level:com.netflix: DEBUG  # 将 com.netflix包的日志级别设置为debug,将打印zuul的转发细节

调用 http://localhost:4534/api/userprovider/3 ,观察zuul的日志如下

然后去对应的微服务看是否有匹配的路径即可。


Spring Cloud【Finchley】-16 Zuul的路由配置相关推荐

  1. 青柠开车Spring Cloud(五) —— spring cloud的窗口zuul(路由和过滤器)

    项目源码github地址 什么是zuul 快速入门 zuul项目基本配置 将zuul加入eureka-server中,实现高可用 什么是zuul zuul在之前我举得例子中,担任的是警察的角色.准确的 ...

  2. 积分和人民币比率_通过比率路由到旧版和现代应用程序–通过Spring Cloud的Netflix Zuul...

    积分和人民币比率 从应用程序的旧版本迁移到应用程序的现代化版本时,一个非常常见的要求是能够将用户缓慢迁移到新应用程序. 在本文中,我将介绍通过Spring Cloud使用对Netflix Zuul的支 ...

  3. 基于比率的路由到旧版和现代应用程序–通过Spring Cloud的Netflix Zuul

    从应用程序的旧版本迁移到应用程序的现代化版本时,一个非常普遍的要求是能够将用户缓慢迁移到新应用程序. 在本文中,我将介绍通过Spring Cloud使用对Netflix Zuul的支持编写的这种路由层 ...

  4. Spring Cloud Finchley OpenFeign的重试配置相关的坑

    如题,本文基于Spring Cloud Finchley.SR2 OpenFeign的重试 OpenFeign配置重试后,逻辑分析 对比Daltson和Finchley的基本组件,发现Ribbon还有 ...

  5. Spring Cloud入门-Nacos实现注册和配置中心(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 Nacos简介 使用Nacos作为注册中心 安装并运行Nacos 创建应用注册到Nacos 负载均衡功能 使用Nacos作为配置中心 创建naco ...

  6. Java之 Spring Cloud 微服务的 SpringCloud Config 配置中心(第四个阶段)【二】【SpringBoot项目实现商品服务器端调用】

    SpringCloud学习目录点击跳转对应的文章 Java之 Spring Cloud 微服务搭建(第一个阶段)[一][SpringBoot项目实现商品服务器端是调用] Java之 Spring Cl ...

  7. spring cloud 学习(6) - zuul 微服务网关

    微服务架构体系中,通常一个业务系统会有很多的微服务,比如:OrderService.ProductService.UserService...,为了让调用更简单,一般会在这些服务前端再封装一层,类似下 ...

  8. spring cloud gateway nacos搭建动态路由

    spring cloud gateway nacos搭建动态路由 一.环境 开发工具:IntelliJ Idea JDK 1.8 Spring boot 2.3.12.RELEASE spring c ...

  9. Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置

    <Spring Cloud Alibaba基础教程>连载中,关注我一起学期!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...

最新文章

  1. 从当前日期算起,获取几天前的日期和几个月前的日期
  2. 机器学习——利用K-均值聚类算法对未标注数据分组
  3. JS getAttribute和setAttribute(取得和设置属性)的使用介绍
  4. GRUB and LVM and EVMS
  5. Windows Server2012 搭建域错误“本地Administraor账户不需要密码”
  6. PIC中的#pragma idata 和#pragma udata
  7. PyTorch基础(五)----- torch.cat()方法
  8. Python协同过滤推荐算法(Collaborative Filtering)2.相似度的计算,相似度计算方法
  9. el-table处理某一行样式;el-table表格row-class-name无效原因;el-table格式化某行样式和数据
  10. 【编译原理】词法分析程序设计
  11. scala基础之泛型详解
  12. 2015年辽宁省赛Interesting Tree
  13. oracle升级补丁报错,oracle rac升级补丁及中间的错误提示
  14. arduino读取水位传感器的数据显示在基于i2c的1602a上_构建Arduino的LoRa远程智能空气质量监测系统...
  15. 【图像计数】基于matlab灰度二值化同类物体简单计数【含Matlab源码 759期】
  16. 来给你的CSDN博客换个皮肤~
  17. Unity内置管线Projector原理分析
  18. 20191122 视频版控制台上的极乐净土
  19. mongodb使用csv导入导出
  20. 操作系统添加系统调用+内核编译

热门文章

  1. 桌面计算机怎么覆盖文件,win7系统桌面快捷方式图标被未知文件覆盖如何解决...
  2. wget命令出现Unable to establish SSL connection.错误
  3. xp系统怎么弄清微软服务器名称,xp系统电脑怎么远程云服务器
  4. 机器人达到指定位置方法数
  5. 拼接所有字符串产生字典顺序最小的大写字符串
  6. markdown 笔记
  7. 用Tableau制作滚动时间轴(上)
  8. Python实现有道翻译
  9. vba 数值转文本_数值转文本,TEXT函数神操作
  10. 【Linux】23_网络管理物理层详解