Bootstrap

SpringCloud-Gateway Feign

目录

一、Gateway简介

1.1 Gateway简介

1.2 Gateway原理

二、Gateway程序案例

2.1 总体说明

2.2 新建SpringCloud-Gateway子项目

2.3 结果验证

2.4 总结

三、openfeign简介

3.1 openfeign介绍

四、openfeign程序编写

4.1总体说明

4.2 修改pom.xml引入OpenFeign的依赖

4.3 application.yml不做变化

4.4 修改主类,启用Feign

4.5 编写Feign接口

4.6 提供统一对外服务接口

4.7结果验证

4.8 总结


一、Gateway简介

1.1 Gateway简介

Spring Cloud Gateway旨在提供一种简单而有效的方式来对API进行路由,并为他们提供切面,例如:安全性,监控/指标 和弹性等。

1.2 Gateway原理

客户端向spring-cloud-gateway请求网关映射处理程序(gateway handler mapping),如果确认请求与路由匹配,则将请求发送到web处理程序(gateway web handler),web处理程序通过特定于该请求的过滤器链处理请求,图中filters被虚线划分的原因是filters可以在发送代理请求之前(pre filter)或之后执行逻辑(post filter)。先执行所有pre filter逻辑,然后进行请求代理。在请求代理执行完后,执行post filter逻辑。

二、Gateway程序案例

2.1 总体说明

本项目总体上为一个分步骤编写完成SpringCloud微服务开发项目的示例程序,使用了Eureka服务注册(第一步)、Ribbon请求负载均衡(第二步)和SpringCloud Gateway微服务网关(第三步)、Feign完成统一服务接口调用(第四步)。
本案例说明为第三步:在前两步完成的基础上,引入SpringCloud-Gateway,通过网关统一调用服务。
本案例在第二步案例基础上,原有项目不做改变,只是新建了Gateway子项目,有变化的内容如图:

 注意:由于SpringCloud-Gateway是基于webflux的,它跟传统的springboot-mvc是冲突的,因此不需在其中排除springmvc相关包!

2.2 新建SpringCloud-Gateway子项目

1.在父项目中,新建子模块项目:new->Module依然选择maven项目。

本项目名称我们命名为Gateway。

2.配置pom.xml

依赖项配置如下:

<dependencies>
    <!--    Eureka客户端    -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!-- SpringCloud网关Gateway -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
<dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
    </dependency>
</dependencies>

注意:由于SpringCloud-Gateway是基于webflux的,它与spring boot mvc方式不兼容,启动Gateway会报错,因此不要引入spring-boot-starter-web依赖!

3.配置application.yml文件

Gateway项目也是一个Eureka客户端,并且需要SpringCloud-Gateway自身的配置:

  4.编写SpringBoot应用主类

2.3 结果验证

1.按顺序启动各个子项目

先启动EurekaService子项目,它是Eureka服务器,其他子模块都需作为Eureka客户端在它上面进行注册!
再启动Gateway、ServiceOne、ServiceOneCopy、ServiceTwo和ServiceThree,启动后如下图:

 2.进入Eureka服务状态页面,查看服务注册情况

在谷歌浏览器中输入:http://127.0.0.1:8000/,进入Eureka服务页面,我们查看当前注册情况:

 3.验证已有的各业务接口

在使用Gateway之后,所有的请求都应当通过Gateway来统一调用各个微服务业务模块的接口,根据Gateway的配置,调用形式统一为:
http://Gateway_HOST:Gateway_PORT/大写的serviceId/**
我们在浏览器地址栏或者PostMan中依次请求已存在的几个接口地址:

1)ServiceOne模块业务接口

http://127.0.0.1:8088/SERVICE-ONE/serviceOne

 由于ServiceOne和ServiceOneCopy都使用同一个应用ID:“service-one”,因此Gateway通过应用ID请求“serviceOne”接口时,已经自动进行了负载均衡,第二次重复调用的结果:

2)ServiceTwo模块业务接口

http://127.0.0.1:8088/SERVICE-TWO/serviceTwo

 3)ServiceThree模块业务接口(负载均衡)

 http://127.0.0.1:8088

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;