当前位置: 首页 > news >正文

13-springcloud gateway集成nacos实现负载均衡

网关作为访问系统的入口,负载均衡是必选项而不是可选项,本文介绍gateway与nacos集成,实现负载均衡的过程。关于springcloud gateway的基本用法,同学可以看看上篇文章: 12-使用gateway作为网关。

0、环境

  • jdk:1.8
  • springboot:2.4.2
  • nacos:2.0.3

1、项目结构

整体的项目目录结构如下:

在这里插入图片描述
部署的时候,service-1我会部署两份,用来模拟多实例微服务的调用。

2、gateway服务实现

请求过程:客户端发请求,请求到达gateway,gateway识别请求并处理,再按照负载均衡算法选择一个服务转发请求。

下面先实现gateway服务。

2.1、引入依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2021.1</version>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2021.1</version>
</dependency><!--负载均衡依赖不可少-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId><version>3.0.1</version>
</dependency>

2.2、application.yml

正如我们设想的一样,要使用nacos作为注册中心,肯定要配置服务发现,全量配置代码如下:

server:port: 9080spring:application:name: gatewaycloud:nacos:discovery:server-addr: 192.168.3.99:8848namespace: devgroup: group1cluster-name: Claster-Aservice: gatewaygateway:discovery:locator:enabled: trueroutes:- id: 001uri: lb://service-1    #匹配后端提供服务的路由地址,注意lb开头,表示启用负责均衡predicates:- Path=/sample/service1/say/**         # 断言,路径相匹配的进行路由filters:- StripPrefix=2

关键的两个配置,一个是配置了nacos服务注册与发现的服务地址,另一个配置了网关转发的相关参数,注意,uri的配置是“lb”开头,代表了可以负载均衡,与普通的uri写法不同。

3、service-1的实现

3.1、引入依赖

只需要引入nacos服务发现的依赖,代码如下:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2021.1</version>
</dependency>

3.2、application.yml

service-1的实现与gateway基本相同,不同的是,service-1不需要配置网关转发的相关配置。application.yml配置文件如下:

server:port: 9081spring:application:name: service-1cloud:nacos:discovery:server-addr: 192.168.3.99:8848namespace: devgroup: group1cluster-name: Claster-Aservice: service-1

2.3、controller实现

这个就不多少说了,写个controller即可,代码如下:

@RestController
@RequestMapping("/say")
public class SomethingToSay {@GetMapping("/hello")public String sayHello() {return "Server " + port + ": hello";}@GetMapping("/hi")public String sayHi() {return "Server " + port + ": hi";}@GetMapping("/ohh")public String sayOhh() {return "Server " + port + ": ohh";}@Value("${server.port}")private Integer port;
}

3、测试

由于service-1需要启动两份,所以先利用idea的Run/Debug Configurations功能,复制一份调试配置,再覆盖端口配置参数即可,见下图:
在这里插入图片描述

此时,service-1就有两个实例了,分别启动三个服务,再看看nacos的服务注册列表,当然,前提是三个服务都正常启动。如下图:
在这里插入图片描述

3.1、发请求

现在万事俱备,就差发射了,咱们利用apifox发个请求试试,看负载均衡的效果:
在这里插入图片描述
当我连续点击发送请求时,端口号会发生变化,也就是说我们的请求分别落在了两个服务实例上。
OK,就到这里吧。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【0-1背包】力扣416. 分割等和子集
  • 大模型本地化部署2-Docker部署MaxKB
  • Unity(2022.3.41LTS) - 网格,纹理,材质
  • Clickhouse集群化(三)集群化部署
  • 云计算day32
  • Windows系统安装MySQL
  • 2024 Ollama 一站式解决在Windows系统安装、使用、定制服务与实战案例
  • 线性代数:如何由AB=E 推出 BA=AB?
  • 【有来开源组织】开发规范手册
  • 【开端】 进行页面升级或维护时不影响用户体验NGINX配置
  • 影像设备国产替代究竟有多重要?这家企业提前布局8K时代
  • object.defineProperty用法
  • 开放式耳机的优缺点有什么?本文为你讲解推荐一下!
  • encodeURI 确保特殊字符能够正确传输
  • 告别手动记录,音频转文字软件助力会议记录新高度
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • ESLint简单操作
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Git的一些常用操作
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Java程序员幽默爆笑锦集
  • JWT究竟是什么呢?
  • PAT A1120
  • PHP 小技巧
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • 半理解系列--Promise的进化史
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 高度不固定时垂直居中
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 详解NodeJs流之一
  • 异常机制详解
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 转载:[译] 内容加速黑科技趣谈
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​虚拟化系列介绍(十)
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (ZT)一个美国文科博士的YardLife
  • (纯JS)图片裁剪
  • (四)事件系统
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)JAVA中的堆栈
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • *p++,*(p++),*++p,(*p)++区别?
  • .Net - 类的介绍
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .net快速开发框架源码分享