在前一步上已经说明,组件脚手架的第一步就是构建注册中心,由于采用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版本依赖
<!-- SpringCloudAlibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
在dependencies中引入nacos服务治理发现jar包
<!-- nacos注册发现 注册中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
完整的pom文件如下:
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>gateway-parent</groupId>
<artifactId>gateway-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>gateway-parent</name>
<description>gateway-parent 网关项目父类项目,总理网关管理</description>
<modules>
<module>gateway-manage</module>
</modules>
<!--springboot基础包,继承父,可不必,如果确实要用,必须跟下文的spring版本一致,否则报错 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath />
</parent>
<!-- 在 properties下声明相应的版本信息,然后在 dependency 下引用的时候用 ${} 就可以引入该版本 jar 包了 -->
<properties>
<!-- 编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- jdk -->
<java.version>1.8</java.version>
<!-- SpringBoot、SpringCloud、SpringCloudAlibaba三者的版本最好匹配 -->
<!-- SpringBoot -->
<spring.boot.dependencies.version> 2.3.2.RELEASE </spring.boot.dependencies.version>
<!-- SpringCloud -->
<spring.cloud.dependencies.version>Hoxton.SR9</spring.cloud.dependencies.version>
<!-- SpringCloudAlibaba -->
<spring.cloud.alibaba.dependencies.version> 2.2.6.RELEASE </spring.cloud.alibaba.dependencies.version>
</properties>
<!-- 依赖 jar 包版本管理的管理器 -->
<!-- 如果 dependencies 里的 dependency 自己没有声明 version 元素,那么 maven 就此处来找版本声明。 -->
<!-- 如果有,就会继承它;如果没有就会报错,告诉你没有版本信息 -->
<!-- 优先级:如果 dependencies 里的 dependency 已经声明了版本信息,就不会生效此处的版本信息了 -->
<dependencyManagement>
<dependencies>
<!-- spring cloud版本号 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--支持Spring Boot 2.1.X,匹配版本2.0.x -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringCloudAlibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 独立依赖,不依托下方的jar包版本管理的管理器,同步版本管理器中的版本 -->
<dependencies>
<!-- springboot 测试依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 引入nacos注册中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<!-- 构建插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
第三步 创建网关子模块,取名gateway,负责所有网关的转发、过滤、限流等业务
核心依赖有两个,Gateway的jar包和springcloud消费者启动包,注明:由于注册中心已经被nacos取代,所以用不到springcloud的注册中心服务包,其余所有的springcloud子模块用到的都是消费者包
依赖如下:
<!-- 添加Gateway作为网关 -->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
在启动配置文件bootstrap.yml中加入nacos注册中心的地址
# bootstrap.yml 先于 application.yml 加载,用来在程序引导时执行
server:
port: ${SERVER_PORT:8888}
spring:
application:
name: gateway
cloud:
nacos:
discovery:
# 注册中心地址
server-addr: localhost:8848
# 用户名,未修改时可省略该项
username: nacos
# 密码,未修改时可省略该项
password: nacos
config:
# 配置中心地址
server-addr: localhost:8848
# 文件扩展名
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