之前说过GateWay是一个zuul的路由替代品,但GateWay也可以实现负载均衡的能力,与ribbon不一样,他通过服务注册中心的服务名/接口实现负载均衡的能力

我们把之前的代码复制一下,项目结构如下

我们需要用的是,eureka服务注册中心,gateway路由,普通项目f1,普通项目f2

如果你还不会搭建服务注册中心可以点击这里:eureka服务注册中心

如果你还不会搭建路由可以点击这里:gateway路由

使用非常简单,我们只要修改一下gateway的配置文件,如下所示

 

spring.application.name服务名

spring.cloud.gateway.discovery.locator.enabled开启 Gateway的注册中心发现配置,开启后可自动从服务注册中心拉取服务列表,通过各个服务的 spring.application.name作为前缀进行转发,该配置默认为 false

eureka.client.service-url.defaultZone配置 EurekaServer默认的空间地址,uname:pwd是springSecurity的账号和密码,

如果不懂可以点击这里:Spring Security安全框架

修改pom文件,添加注册发现依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

修改Gateway启动文件,增加客户端注册发现注解@EnableDiscoveryClient,代码如下所示

我们分别启动一下eureka服务注册中心,gateway路由,普通项目f1,普通项目f2

在之前我们的f1项目与f2项目都有一个接口叫test,用来区分两个项目

我们可以分别访问一下看看

这个时候我们访问我们的Gateway路由,上面我们说过,Gateway的负载均衡规则是通过服务注册中心的服务名/接口实现负载均衡的能力

我的服务名是spring.application.name配置的名字,所以我们需要访问的是http://127.0.0.1:8008/f1/test

但是我们发现,找不到这么一个接口,我们开启一下Gateway的日志,看一下是为什么

修改配置文件

从新启动一下,看一下控制台信息

从日志上我们可以看到,原来转发的是大写的,为什么呢?这是eureka服务注册中心的规则,会把所有的服务id转为大写,我们看一下eureka服务注册中心的界面

 

所以这里我们需要访问的是http://127.0.0.1:8008/F1/test

我们多访问几次

从结果可以看到,我们完成了预定的负载均衡目标

 

 

o(*≧▽≦)ツ┏━┓

o(*≧▽≦)ツ┏━┓

o(*≧▽≦)ツ┏━┓

 

配套源码:https://gitee.com/ww2510095/spring_cloud_learning

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐