点击上方“方志朋”,选择“置顶或者星标”

你的关注意义重大!

在之前的文章介绍了Spring Cloud Gateway的Predict(断言)、Filter(过滤器),大家对Spring Cloud Gateway有初步的认识,其中在对服务路由转发的这一块,在之前的文章是采用硬编码的方式进行路由转发。这篇文章以案例的形式来讲解Spring Cloud Gateway如何配合服务注册中心进行路由转发。

工程介绍

本案例中使用spring boot的版本为2.0.3.RELEASE,spring cloud版本为Finchley.RELEASE。在中涉及到了三个工程, 分别为注册中心eureka-server、服务提供者service-hi、 服务网关service-gateway,如下:

工程名 端口 作用
eureka-server 8761 注册中心eureka server
service-hi 8762 服务提供者 eurka client
service-gateway 8081 路由网关 eureka client

这三个工程中,其中service-hi、service-gateway向注册中心eureka-server注册。用户的请求首先经过service-gateway,根据路径由gateway的predict 去断言进到哪一个 router, router经过各种过滤器处理后,最后路由到具体的业务服务,比如 service-hi。如图:

eureka-server、service-hi这两个工程直接复制于我的另外一篇文章https://blog.csdn.net/forezp/article/details/81040925 ,在这就不在重复,可以查看源码,源码地址见文末链接。 其中,service-hi服务对外暴露了一个RESTFUL接口“/hi”接口。现在重点讲解service-gateway。

gateway工程详细介绍

在gateway工程中引入项目所需的依赖,包括eureka-client的起步依赖和gateway的起步依赖,代码如下:

<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-gateway</artifactId>
</dependency>

在工程的配置文件application.yml中 ,指定程序的启动端口为8081,注册地址、gateway的配置等信息,配置信息如下:

server:port: 8081
spring:application:name: sc-gateway-servicecloud:gateway:discovery:locator:enabled: truelowerCaseServiceId: true
eureka:client:service-url:defaultZone: http://localhost:8761/eureka/

其中,spring.cloud.gateway.discovery.locator.enabled为true,表明gateway开启服务注册和发现的功能,并且spring cloud gateway自动根据服务发现为每一个服务创建了一个router,这个router将以服务名开头的请求路径转发到对应的服务。spring.cloud.gateway.discovery.locator.lowerCaseServiceId是将请求路径上的服务名配置为小写(因为服务注册的时候,向注册中心注册时将服务名转成大写的了),比如以/service-hi/*的请求路径被路由转发到服务名为service-hi的服务上。

在浏览器上请求输入localhost:8081/service-hi/hi?name=1323,网页获取以下的响应:

hi 1323 ,i am from port:8762

在上面的例子中,向gateway-service发送的请求时,url必须带上服务名service-hi这个前缀,才能转发到service-hi上,转发之前会将service-hi去掉。 那么我能不能自定义请求路径呢,毕竟根据服务名有时过于太长,或者历史的原因不能根据服务名去路由,需要由自定义路径并转发到具体的服务上。答案是肯定的是可以的,只需要修改工程的配置文件application.yml,具体配置如下:

spring:application:name: sc-gateway-servercloud:gateway:discovery:locator:enabled: falselowerCaseServiceId: trueroutes:- id: service-hiuri: lb://SERVICE-HIpredicates:- Path=/demo/**filters:- StripPrefix=1

在上面的配置中,配置了一个Path 的predict,将以/demo/**开头的请求都会转发到uri为lb://SERVICE-HI的地址上,lb://SERVICE-HI即service-hi服务的负载均衡地址,并用StripPrefix的filter 在转发之前将/demo去掉。同时将spring.cloud.gateway.discovery.locator.enabled改为false,如果不改的话,之前的localhost:8081/service-hi/hi?name=1323这样的请求地址也能正常访问,因为这时为每个服务创建了2个router。

在浏览器上请求localhost:8081/demo/hi?name=1323,浏览器返回以下的响应:

hi 1323 ,i am from port:8762

返回的结果跟我们预想的一样。

源码下载

https://github.com/forezp/SpringCloudLearning/tree/master/sc-f-gateway-cloud

参考资料

https://juejin.im/post/5aa4eacbf265da237a4ca36f

https://www.jianshu.com/p/1c942a8abe18

https://juejin.im/post/5ba8daa56fb9a05cfe486ebf

-更多文章-

Spring Cloud GateWay初体验

Spring 面试问题 TOP 50

深入聊一聊 Spring AOP 实现机制

spring cloud gateway之filter篇

-关注我-

spring cloud gateway之服务注册与发现相关推荐

  1. Spring Cloud入门 -- Consul服务注册与发现(Hoxton.SR5版)

    Consul简介 Consul 是 HashiCorp 公司推出的开源产品,用于实现分布式系统的服务发现.服务隔离.服务配置,这些功能中的每一个都可以根据需要单独使用,也可以同时使用所有功能.Cons ...

  2. Spring Cloud入门 -- Eureka服务注册与发现(Hoxton.SR5版)

    什么是Spring Cloud Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.智能路由.消息总 ...

  3. spring cloud 学习之 服务注册和发现(Eureka)

    一:服务注册和发现(Eureka) 1:采用Eureka作为服务注册和发现组件 2:Eureka 项目中 主要在启动类加上 注解@EnableEurekaServer @SpringBootAppli ...

  4. SpringCloud 2020版本教程2:使用spring cloud gateway作为服务网关

    点击关注公众号,Java干货及时送达 Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关.网关作为流量的,在微服务系统中有着非常作用,网关常见 ...

  5. Spring Cloud之acos服务注册与Dubbo

    Spring Cloud之acos服务注册与Dubbo nacos是springcloud的扩展,注册中心功能通过NacosDiscoveryClient 继承DiscoveryClient,在spr ...

  6. 谷粒商城微服务分布式基础篇二—— Spring Cloud Alibaba、Nacos注册与发现

    文章目录 Spring Cloud Alibaba--微服务开发 Spring Cloud Alibaba是什么?  主要功能  组件 为什么不使用Spring Cloud 使用 Nacos Disc ...

  7. spring cloud gateway+nacos 服务下线感知延迟,未及时出现503,请求依然转发到下线服务

    spring cloud gateway服务下线感知延迟,未及时出现503 1.场景描述 2.分析 2.1定位问题 3.解决方案 本篇算是配合之前的一篇了.整体问题是gateway对下线服务感知延迟, ...

  8. [Spring-cloud-eureka]使用 gradle, spring boot,Spring cloud Eureka 搭建服务注册中心

    2019独角兽企业重金招聘Python工程师标准>>> Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,它基于 Netfli ...

  9. Dubbo Spring Cloud 逆向分析服务注册事件变化的处理过程

    这篇介绍了如何从接收事件的方法逆向推出完整的事件处理过程,这个方法适合在解决具体问题或学习源码时,倒着把处理过程理顺. 起因 原来用的 Spring Boot + Dubbo 开发架构,在架构中有一个 ...

最新文章

  1. 吸顶wifi_分享 | 酒店WiFi网络的三种部署模式
  2. css(面试第2天)用css绘制三角形
  3. (九)2005年我的第一次软件行业创业,烧掉30万、2年时间打水漂的惨痛教训
  4. 背包九讲之四(混合三种背包问题)
  5. 如何编程两个android 手机进行通信_100+ 队伍激烈角逐 Geek Online 2020 编程挑战赛完美收官 - 业界动态...
  6. 她16岁因汶川地震改志学医,仅27岁当上浙大博导!她说:科研是“止不住想念到失眠的对象”...
  7. Spring boot 2.3优雅下线,距离生产还有多远?
  8. postman用法_应该是接口测试神器postman最全的用法总结了
  9. dsd语言证书c1是什么,DSD一级德语语言证书考试在嘉兴高级中学举行
  10. [转]Groovy和Grails简介
  11. .net random伪随机数
  12. 判断坐标位置C语言,〓求助〓谁能帮忙编个程序:输入N个点坐标,判断能否构成多边形....
  13. 洛谷P2770 航空路线问题(费用流)
  14. javascript -- 变量
  15. linux获取软电话信息,完整的SIP软电话工程实施过程
  16. 操作系统SPF算法Java实现
  17. 关于Linux UDP/TCP reuseport 二三事
  18. 数学问题-标量三重积向量三重积
  19. IntelliJ IDEA双击打不开的解决过程
  20. 单片机设计经验设计技巧集锦

热门文章

  1. Eclipse用法和技巧十:显示代码outline
  2. 浏览器常见兼容性问题汇总
  3. php中this,self,parent三个关键字
  4. SQL Server系统表sysobjects介绍与使用
  5. 推荐60+ Flex开发参考网站
  6. 谢文睿:西瓜书 + 南瓜书 吃瓜系列 3. 对数几率回归
  7. 如何利用 C# 实现 K-D Tree 结构?
  8. 分析与设计(AD)简介(3)
  9. tensorflow 2
  10. 图像 DFT 尺寸转换