consul + gateway + ribbon实现负载均衡
- 前言:
- 1.Gateway环境搭建
-
- 2.测试
-
- 3.总结
前言:
1.Gateway环境搭建使用的consul服务注册中心,所以需要单独建立一个gateway子项目,然后引入gateway和consul的依赖,注册到consul服务端
并且为了测试,还注册了category服务和goods服务,其中goods服务含有两个节点,模拟集群
pom文件
父项目
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jw</groupId>
<artifactId>springcloud_parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>springcloud_08_gateway</module>
</modules>
<!-- 继承 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<!--定义springcloud使用版本号-->
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR6</spring-cloud.version>
</properties>
<!--全局管理springcloud版本,并不会引入具体依赖-->
<dependencyManagement>
<dependencies>
<dependency>
<!-- 这里发现多了<type>选项,表示引入的cloud是一个项目(工程),不是平常的一个jar,因为cloud是许多子项目的工具集
由于一个pom文件只能有一个父项目,
如果还想把另一个项目中的依赖引入,就得使用这种形式 -->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子项目
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud_parent</artifactId>
<groupId>com.jw</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springcloud08_gateway</artifactId>
<dependencies>
<!--引入gateway网关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--引入consul依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!-- 这个包是用做健康度监控的-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
</project>
application配置文件
server:
port: 7878
spring:
application:
name: GATEWAY
cloud:
gateway:
routes:
- id: CategoryRoute # 指定路由唯一标识
uri: http://localhost:8081/ # 指定路由服务的地址
predicates:
- Path=/category/** # 指定路由规则
- id: GoodsRoute
uri: lb://GOODS
predicates:
- Path=/goods/**
consul:
host: localhost
port: 8500
如果要查看路由列表规则
需要在配置文件中添加
management:
endpoints:
web:
exposure:
include: "*" #开启所有web端点暴露
访问 http://localhost:7878/actuator/gateway/routes
2.测试
发现通过网关访问goods服务时,第一次访问的是8082端口服务,第二次是8083端口服务,这里默认采用的是负载轮询的策略
测试通过
下面访问category服务,只有一个节点,不用负载均衡
3.总结
引入consul依赖时,底层已经引入了ribbon依赖,无需手动添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>