小言_互联网的博客

脚手架2 以nacos为注册中心,基于Gateway构架网关

545人阅读  评论(0)

在前一步上已经说明,组件脚手架的第一步就是构建注册中心,由于采用nacos,这些将直接放在配置文件中实现,不再单独搭建eureka。

spring nacos jdk各组件依赖版本推荐

Spring Boot,Spring Cloud,Spring Cloud Alibaba 版本选择说明以及整理归纳_乐之终曲的博客-CSDN博客

版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub

第一步 创建gateway父类项目parent——maven project,需要注意的,父类项目打包都是pom,而子模块打包都是jar,这一点在springcloud教程中已经说明。

加入springboot基础包,这是所有项目的基础依赖

还可以加入springboot 测试依赖

最重要的是springcloud依赖,一定要选择对版本号,这里选择Hoxton.SR9,对应jdk8

第二步 在父项目中,添加Alibaba系注册中心nacos,引入nacos依赖,该部分依赖全部在网关的parent父类项目上,作为公共依赖来使用。

有关nacos的官方文档参考Spring Cloud Alibaba

在dependencyManagement中引入Alibaba版本依赖


  
  1. <!-- SpringCloudAlibaba -->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  5. <version>${spring.cloud.alibaba.dependencies.version}</version>
  6. <type>pom</type>
  7. <scope> import</scope>
  8. </dependency>

在dependencies中引入nacos服务治理发现jar包


  
  1. <!-- nacos注册发现 注册中心-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  5. </dependency>

完整的pom文件如下:


  
  1. <project xmlns= "http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion> 4.0 .0</modelVersion>
  5. <groupId>gateway-parent</groupId>
  6. <artifactId>gateway-parent</artifactId>
  7. <version> 0.0 .1-SNAPSHOT</version>
  8. <packaging>pom</packaging>
  9. <name>gateway-parent</name>
  10. <description>gateway-parent 网关项目父类项目,总理网关管理</description>
  11. <modules>
  12. < module>gateway-manage</ module>
  13. </modules>
  14. <!--springboot基础包,继承父,可不必,如果确实要用,必须跟下文的spring版本一致,否则报错 -->
  15. <parent>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-parent</artifactId>
  18. <version> 2.0 .3.RELEASE</version>
  19. <relativePath />
  20. </parent>
  21. <!-- 在 properties下声明相应的版本信息,然后在 dependency 下引用的时候用 ${} 就可以引入该版本 jar 包了 -->
  22. <properties>
  23. <!-- 编码 -->
  24. <project.build.sourceEncoding>UTF- 8</project.build.sourceEncoding>
  25. <project.reporting.outputEncoding>UTF- 8</project.reporting.outputEncoding>
  26. <!-- jdk -->
  27. <java.version> 1.8</java.version>
  28. <!-- SpringBoot、SpringCloud、SpringCloudAlibaba三者的版本最好匹配 -->
  29. <!-- SpringBoot -->
  30. <spring.boot.dependencies.version> 2.3 .2.RELEASE </spring.boot.dependencies.version>
  31. <!-- SpringCloud -->
  32. <spring.cloud.dependencies.version>Hoxton.SR9</spring.cloud.dependencies.version>
  33. <!-- SpringCloudAlibaba -->
  34. <spring.cloud.alibaba.dependencies.version> 2.2 .6.RELEASE </spring.cloud.alibaba.dependencies.version>
  35. </properties>
  36. <!-- 依赖 jar 包版本管理的管理器 -->
  37. <!-- 如果 dependencies 里的 dependency 自己没有声明 version 元素,那么 maven 就此处来找版本声明。 -->
  38. <!-- 如果有,就会继承它;如果没有就会报错,告诉你没有版本信息 -->
  39. <!-- 优先级:如果 dependencies 里的 dependency 已经声明了版本信息,就不会生效此处的版本信息了 -->
  40. <dependencyManagement>
  41. <dependencies>
  42. <!-- spring cloud版本号 -->
  43. <dependency>
  44. <groupId>org.springframework.cloud</groupId>
  45. <artifactId>spring-cloud-dependencies</artifactId>
  46. <version>${spring.cloud.dependencies.version}</version>
  47. <type>pom</type>
  48. <scope> import</scope>
  49. </dependency>
  50. <!--支持Spring Boot 2.1.X,匹配版本 2.0.x -->
  51. <dependency>
  52. <groupId>org.springframework.boot</groupId>
  53. <artifactId>spring-boot-dependencies</artifactId>
  54. <version>${spring.boot.dependencies.version}</version>
  55. <type>pom</type>
  56. <scope> import</scope>
  57. </dependency>
  58. <!-- SpringCloudAlibaba -->
  59. <dependency>
  60. <groupId>com.alibaba.cloud</groupId>
  61. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  62. <version>${spring.cloud.alibaba.dependencies.version}</version>
  63. <type>pom</type>
  64. <scope> import</scope>
  65. </dependency>
  66. </dependencies>
  67. </dependencyManagement>
  68. <!-- 独立依赖,不依托下方的jar包版本管理的管理器,同步版本管理器中的版本 -->
  69. <dependencies>
  70. <!-- springboot 测试依赖 -->
  71. <dependency>
  72. <groupId>org.springframework.boot</groupId>
  73. <artifactId>spring-boot-starter-test</artifactId>
  74. <scope>test</scope>
  75. </dependency>
  76. <!-- 引入nacos注册中心 -->
  77. <dependency>
  78. <groupId>com.alibaba.cloud</groupId>
  79. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  80. </dependency>
  81. </dependencies>
  82. <!-- 构建插件 -->
  83. <build>
  84. <plugins>
  85. <plugin>
  86. <groupId>org.springframework.boot</groupId>
  87. <artifactId>spring-boot-maven-plugin</artifactId>
  88. </plugin>
  89. </plugins>
  90. </build>
  91. </project>

第三步 创建网关子模块,取名gateway,负责所有网关的转发、过滤、限流等业务

核心依赖有两个,Gateway的jar包和springcloud消费者启动包,注明:由于注册中心已经被nacos取代,所以用不到springcloud的注册中心服务包,其余所有的springcloud子模块用到的都是消费者包

依赖如下:


  
  1. <!-- 添加Gateway作为网关 -->
  2. <dependencies>
  3. <dependency>
  4. <groupId>org.springframework.cloud</groupId>
  5. <artifactId>spring-cloud-starter-gateway</artifactId>
  6. </dependency>
  7. </dependencies>

在启动配置文件bootstrap.yml中加入nacos注册中心的地址


  
  1. # bootstrap.yml 先于 application.yml 加载,用来在程序引导时执行
  2. server:
  3. port: ${SERVER_PORT: 8888}
  4. spring:
  5. application:
  6. name: gateway
  7. cloud:
  8. nacos:
  9. discovery:
  10. # 注册中心地址
  11. server-addr: localhost: 8848
  12. # 用户名,未修改时可省略该项
  13. username: nacos
  14. # 密码,未修改时可省略该项
  15. password: nacos
  16. config:
  17. # 配置中心地址
  18. server-addr: localhost: 8848
  19. # 文件扩展名
  20. file-extension: yml

 

在启动类上加入注解@EnableDiscoveryClient即可将该服务注册到nacos。

注意:此处没有用Eureka作为注册中心,所以不可以使用注解@EnableEurekaClient,该注解不适用于其他注册中心。共同点是都是能够让注册中心能够发现,扫描到该服务。

第四步 启动项目,关于启动类用springboot方式启动即可,即注解@SpringBootApplication和@EnableDiscoveryClient

@SpringBootApplication(scanBasePackages = { "person.henry.ou.bookkeeping.user", "person.henry.ou.bookkeeping.common" })

scanBasePackages 注解生效范围,表明spring托管的范围

打开nacos管理网站,

http://localhost:8848/nacos/index.html

输入用户名、密码,(默认均为nacos)可在nacos中发现服务:

点击详情可见:

按照图中IP:端口键入浏览器访问:

页面抛出404异常,说明项目正常了。

个人网站:ouhenry.top


转载:https://blog.csdn.net/gelangqing/article/details/128744403
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场