🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
实现动态路由需要注册中心的支持,这里选择 Eureka 作为注册中心。 默认情况下 Gateway 会根据注册中心注册的`微服务名`为路径创建动态路由进行转发,从而实现动态路由的功能,这样就不用写死一个地址了。 ![](https://img.kancloud.cn/e0/ce/e0ce13e098f405c10e0109b7b940b848_1592x530.png) 上面的两个微服务名是一样的,但请求地址不一样,下面网关通过微服务名来访问这两个微服务。 <br/> 动态路由实现步骤如下: **1. 在网关模块引入 netflix-eureka-client** ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> ``` **2. 在网关模块配置路由规则** ```yml server: port: 9527 spring: application: name: assemb-server-gateway cloud: gateway: routes: - id: assemb-server-payment #路由ID,自定义 uri: lb://assemb-server-payment #lb://微服务名 predicates: - Path=/order/** discovery: locator: enabled: true #开启注册中心动态路由功能 #网关也要注册到注册中心 eureka: client: service-url: defaultZone: http://www.eureka7001.com:7001/eureka/ ``` **3. 在网关模块的启动类上标记注解`@EnableDiscoveryClient`开启服务发现** ```java @EnableDiscoveryClient @SpringBootApplication public class Gateway9527Application { public static void main(String[] args) { SpringApplication.run(Gateway9527Application.class, args); } } ``` **4. 测试** 1. 分别启动注册中心 eureka7001、微服务 payment8001/payment8002、网关gateway9527。 2. 通过网关访问微服务:http://127.0.0.1:9527/order/findById/99 ![](https://img.kancloud.cn/87/7d/877da3baec8ff84a86eb67efb5a30891_1202x356.gif) 不停刷新,可以看到轮询地调用微服务 payment8001/payment8002。