前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Cloud 之服务网关 Zuul (一)

Spring Cloud 之服务网关 Zuul (一)

作者头像
芥末鱿鱼
发布2020-09-22 10:31:34
3270
发布2020-09-22 10:31:34
举报
文章被收录于专栏:玩转 Spring Cloud

Spring Cloud 之服务网关 Zuul (一)

文章目录

诞生背景

微服务架构体现了面向服务开发的敏捷性. 很多公司开始重构应用, 拆解服务. 出现一个新的问题: 有时候完成某个业务, 需要到不同的主机和不同的端口上面调取接口. 服务多了以后, 这是一件很麻烦的过程. 逐渐诞生了一个面向服务治理、服务编排的组件–微服务网关

Zuul 能解决哪些问题

Zuul 是从设备或者网站请求后端应用程序的一个大门. 为内部服务提供了可配置的对外 URL 到服务的映射关系, 基于 JVM的后端路由器:

  • 认证和鉴权
  • 动态路由
  • 压力测试
  • 负载削减

简单案例

项目结构

代码语言:javascript
复制
zhiqu
|_ eureka-server
   |_ pom.xml
|_ gateway-zuul
   |_ pom.xml
|_ good-server
   |_ pom.xml

创建 Eureka-server 工程

参考: https://blog.csdn.net/zjhcxdj/article/details/104637536

创建 Zuul Server 工程

  • pom.xml 配置, 需要引入 Zuul 依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>
  • application.yml 配置 eureka: client: serverUrl: defaultZone: http://localhost:8761/eureka/ instance: lease-renewal-interval-in-seconds: 5 lease-expiration-duration-in-seconds: 15 perfer-in-address: true server: port: 8765 spring: application: name: gateway-zuul zuul: routes: good-server: path: /good-server/** serviceId: good-server 最后 5 行配置的意思是, 把所有以 good-server 开头的 URL 映射到 good-server 这个服务上去. 即可以通过访问 gateway-zuul 服务, 间接的访问 good-server 服务
  • 启动类, 要添加 @EnableZuulProxy 注解 @EnableAutoConfiguration @EnableDiscoveryClient @EnableZuulProxy public class ZuulServerApplication { public static void main(String[] args){ SpringApplication.run(ZuulServerApplication.class,args); } }

创建 good-server 服务

  • pom 文件配置 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
  • application.yml 配置 eureka: client: serverUrl: defaultZone: http://localhost:8761/eureka/ instance: lease-renewal-interval-in-seconds: 5 lease-expiration-duration-in-seconds: 15 perfer-in-address: true server: port: 8764 spring: application: name: good-server
  • 项目启动类 @SpringBootApplication public class GoodServerApplication { public static void main(String[] args) { SpringApplication.run(GoodServerApplication.class, args); } }
  • 写一个 Restful 接口 @RestController @RequestMapping("/goods") public class GoodController { @GetMapping("/{id}") public String getGood(@PathVariable("id") String id) { return "good"; } }
  • 测试
    1. 直接访问 good-server 服务 http://localhost:8764/goods/fdafda 返回: good
    2. 通过 gateway-zuul 服务间接访问 good-server 服务 http://localhost:8765/good-server/goods/fdafda 返回:good 当向 gateway-zuul 发送请求的时候, 网关会向 Eureka 拉取服务列表, 然后按照路由映射规则(url 前缀:good-server -> 服务id: good-server) 路由到相应的服务上去

路由配置

简化配置

Zuul 的配置可以简化, 下面是 /good-server/** 请求映射到 good-server 服务的路由规则

代码语言:javascript
复制
zuul:
  routes:
    good-server: /good-server/**

或者可以直接把映射规则和 serviceId 都去掉, Zuul 会生成默认的映射规则(good-server: /good-server/**):

代码语言:javascript
复制
zuul:
  routes:
    good-server:
    
# 等价于 => 
# zuul:
#   routes:
#     good-server:
#       path: /good-server/**
#       serviceId: good-server

映射到 url

如果想映射大一个具体的物理地址, 把serviceId 替换成 url 就可以了

代码语言:javascript
复制
zuul:
  routes:
    good-server:
      path: /good-server/**
      url: http://localhost: 8764		# good-server 的地址

路由前缀

一般做版本配置的时候, 会给所有的 url 加一个版本前缀:

代码语言:javascript
复制
zuul:
  prefix: /v1
  routes:
    good-server:

这样请求路径会变成: /v1/joke-server/**

路由通配符

规则

说明

示例

/**

匹配任意数量的路径和字符

/good-server/aa、/good-server/bb/cc

/*

匹配任意数量的字符

/good-server/aa、/good-server/dddd

/?

匹配单个字符

/good-server/a、/good-server/b

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 诞生背景
  • Zuul 能解决哪些问题
  • 简单案例
    • 创建 Eureka-server 工程
      • 创建 Zuul Server 工程
        • 创建 good-server 服务
        • 路由配置
          • 简化配置
            • 映射到 url
              • 路由前缀
                • 路由通配符
                相关产品与服务
                微服务引擎 TSE
                微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档