当前位置:   article > 正文

SpringCloud实战【八】: zuul + config 实现动态路由_springcloud routeconfiguration 使用 例子

springcloud routeconfiguration 使用 例子

目录

1、为什么要使用动态路由

2、zuul+config实现动态路由实例

2.1 创建服务提供者

2.2 创建路由配置文件

2.3 创建配置服务端

2.3 创建网关

2.4 创建新服务提供者

3、总结


1、为什么要使用动态路由

微服务的特点是服务特别多,但是对外要统一使用网关作为出入口,请求进入网关之后需要路由到后端的各个服务,实现网关路由的方式有两种:静态路由和动态路由。静态路由和动态路由最大的区别在于路由信息是否写死在路由表中,对应到网关路由上就是是否需要重启网关新配置的路由或者修改的路由才能生效,不用重启就生效的就是动态路由,需要重启的就是静态路由。我们在《API网关-Zuul》中已经使用过了静态路由了(文章访问链接:https://blog.csdn.net/u010482601/article/details/103440962),今天我们一起来学习一下如何使用config实现动态路由。

简单说一下使用springcloud config实现动态路由的原理,路由信息配置在配置文件中,zuul实现配置客户端,实时去获取配置文件的配置信息,有新服务加入,zuul可以实时感知到。

2、zuul+config实现动态路由实例

2.1 创建服务提供者

创建服务提供者项目springcloud-provider1,controller层代码如下所示:

  1. @RestController
  2. public class ProviderController {
  3. @RequestMapping("/helloprovider")
  4. public String hello(){
  5. return "hello-provider1";
  6. }
  7. }

application.yml配置文件如下所示:

  1. #端口号
  2. server:
  3. port: 8001
  4. #Eureka实例名,集群中根据这里相互识别
  5. spring:
  6. application:
  7. name: hello-service
  8. eureka:
  9. #客户端
  10. client:
  11. #注册中心地址
  12. service-url:
  13. defaultZone: http://localhost:7001/eureka/

2.2 创建路由配置文件

创建路由配置文件dynamic-route-dev.yml

  1. zuul:
  2. routes:
  3. hello-service:
  4. path: /hello-service/**
  5. serviceId: hello-service

其中serviceId是服务提供者的服务名,path是访问路径。

2.3 创建配置服务端

创建项目springcloud-config-server,application.yml配置文件如下所示:

  1. server:
  2. port: 9898
  3. #服务名字
  4. spring:
  5. application:
  6. name: config-server
  7. cloud:
  8. config:
  9. server:
  10. git:
  11. #git 仓库的地址
  12. uri: https://github.com/xiaoyususu/springcloud-dynamic-route.git
  13. search-paths: config-file
  14. #git 仓库的账号密码
  15. username: username
  16. password: password
  17. #加入注册中心,实现高可用
  18. eureka:
  19. client:
  20. service-url:
  21. defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/

其他配置不在赘述。 

2.3 创建网关

创建项目springcloud-dynamicroute,pom.xml配置文件如下所示:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>springcloud-dynamic-route</artifactId>
  7. <groupId>com.springcloud</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <groupId>com.springcloud</groupId>
  12. <artifactId>springcloud-dynamicroute</artifactId>
  13. <dependencies>
  14. <!-- Zuul的依赖 -->
  15. <dependency>
  16. <groupId>org.springframework.cloud</groupId>
  17. <artifactId>spring-cloud-starter-zuul</artifactId>
  18. </dependency>
  19. <!-- Eureka的依赖 -->
  20. <dependency>
  21. <groupId>org.springframework.cloud</groupId>
  22. <artifactId>spring-cloud-starter-eureka</artifactId>
  23. </dependency>
  24. <!--Config客户端-->
  25. <dependency>
  26. <groupId>org.springframework.cloud</groupId>
  27. <artifactId>spring-cloud-starter-config</artifactId>
  28. </dependency>
  29. </dependencies>
  30. </project>

创建bootstrap.yml配置文件:

  1. spring:
  2. application:
  3. name: dynamic-route-zuul #这个名字用做拉取配置文件的名称
  4. cloud:
  5. config:
  6. uri: http://localhost:9898/ #指定Spring Cloud Config开放的项目端口
  7. server:
  8. port: 5556
  9. eureka:
  10. client:
  11. serviceUrl:
  12. defaultZone: http://localhost:7001/eureka/ #注册到注册中心中

创建启动类DynamicRouteApplication.java

  1. @EnableZuulProxy
  2. @SpringCloudApplication
  3. @ComponentScan
  4. public class DynamicRouteApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(DynamicRouteApplication.class, args);
  7. }
  8. @Bean
  9. @RefreshScope
  10. @ConfigurationProperties("zuul")
  11. public ZuulProperties zuulProperties(){
  12. return new ZuulProperties();
  13. }
  14. }

启动注册中心springcloud-eureka1、springcloud-eureka2,启动服务提供者springcloud-provider1、springcloud-provider2,启动配置服务端springcloud-config-server,启动网关springcloud-dynamicroute,浏览器访问

http://localhost:5556/hello-service/helloprovider

依次得到如下结果:

2.4 创建新服务提供者

创建服务提供者springcloud-provider2,controller层代码如下所示:

  1. @RestController
  2. public class ProviderController {
  3. @RequestMapping("/route")
  4. public String hello(){
  5. return "route";
  6. }
  7. }

application.yml配置文件如下所示:

  1. #端口号
  2. server:
  3. port: 8002
  4. #Eureka实例名,集群中根据这里相互识别
  5. spring:
  6. application:
  7. name: hello-route
  8. eureka:
  9. #客户端
  10. client:
  11. #注册中心地址
  12. service-url:
  13. defaultZone: http://localhost:7002/eureka/

其他配置不在赘述。

修改路由配置文件dynamic-route-dev.yml,添加服务hello-route

  1. zuul:
  2. routes:
  3. hello-service:
  4. path: /hello-service/**
  5. serviceId: hello-service
  6. hello-route:
  7. path: /hello-route/**
  8. serviceId: hello-route

启动服务提供者springcloud-provider2,浏览器访问

http://localhost:5556/hello-route/route

的到如下结果

可以看到路由没有重启,只需要修改一下路由配置文件,新加的服务就生效了。

3、总结

本文演示了如何使用springcloud zuul和springcloud config实现动态路由,感兴趣的小伙伴可以依次为基础创建项目或者深入学习,本文源码下载地址:https://github.com/xiaoyususu/springcloud-dynamic-route.git

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/843087
推荐阅读
相关标签
  

闽ICP备14008679号