💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
## 一、请求转发负载均衡 在之前的所有章节我们实现的例子中,路由规则的uri定义都是以http地址的形式写死的,如:`http://localhost:8401`,网关收到请求后根据路由规则将请求转发至对应的服务。 ![](https://img.kancloud.cn/fa/18/fa1849e63d592925804cac91388b4823_812x348.png) 但是我们的微服务系统内通常都是一个服务启动多个实例,如下图所示: ![](https://img.kancloud.cn/d2/ee/d2eee5c4d7cd1669fa5b73c24d034977_830x477.png) 为了达到网关接收到的请求能够负载均衡的转发给每个微服务的实例,我们将微服务网关注册到“服务注册中心”,比如:nacos。这样: * gateway接收到请求后,首先从服务注册中心获取到各个微服务实例的访问地址 * 然后gateway根据客户端负载均衡的规则,选择众多实例中的一个作为请求转发对象。 简单的说:**就是将gateway作为一个“服务调用者”注册到nacos服务注册中心,实现客户端负载均衡。** ## 二、集成nacos服务注册客户端 在微服务端怎么集成nacos服务注册中心客户端(nacos章节都讲过),在gateway应用上就怎么集成nacos。 * 通过macen坐标引入nacos服务注册中心客户端jar包 ~~~ <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> ~~~ * 在项目启动类上加上启动服务注册与发现的注解 ~~~ @EnableDiscoveryClient ~~~ * 配置nacos服务的地址 ![](https://img.kancloud.cn/8f/db/8fdb26e6c02989646d070566fbe61a07_605x271.png) * 启动gateway项目(zimug-server-gateway),在nacos控制台可以看到已经注册成功。 ![](https://img.kancloud.cn/1c/b3/1cb397f94d535e39a1dea4921785b8ae_1006x268.png) ## 三、修改Gateway路由配置 以上的步骤只是将nacos客户端集成到了gateway项目(zimug-server-gateway),如果我们希望达到请求实例转发负载均衡的效果,还需要针对gateway项目进行配置: ![](https://img.kancloud.cn/d7/e3/d7e399b2dd6db225352d113f2109b887_777x404.png) * 将uri从写死的http访问地址,改为lb://。gateway会通过去nacos请求多实例的服务访问地址列表,从地址列表中选择一个实例进行请求转发。lb是LoadBalance的缩写! ## 四、测试 我们启动两个aservice-rbac服务实例(本机8401和本机8411端口),并对它通过gateway(8777端口)进行访问测试。 ![](https://img.kancloud.cn/78/7f/787f42bfe7a3530a4f10f6bbbc1baa4c_1223x560.png) 通过观察日志,说明我们网关请求转发的负载均衡效果实现了: * 第一次请求被转发到了本机8401的aservice-rbac服务实例 * 第2次请求被转发到了本机8411的aservice-rbac服务实例