基于SpringCloud Gateway网关 + nacos(注册以及配置中心)微服务搭建
最近公司的搭建的云平台使用了SpringCloud,对于网关这里不是很懂,想自己重新搭建一次,然后记录下以便后面查阅。
1.先创建SpringBoot项目
其实SpringCloud其实就是在SpringBoot上搭建的,所以在这里我就直接先用idea直接生成一个SpringBoot了。
1.1 先点击左上角的file->new->project
1.2 选择你的jdk版本(我现在是1.8版本有点老,不好意思
1.3 更改自定义项目名以及根目录名
1.4 选择你需要创建的SpringBoot版本
1.5 给自己的项目取个名字(也可以直接next!)
1.6 项目创建完毕
接下来开始修改maven 添加springCloud相关包
<properties>
<spring.boot.version>2.2.4.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR1</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.0.RELEASE</spring.cloud.alibaba.version>
</properties>
<!--
引入 Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者 BOM 文件,进行依赖版本的管理,防止不兼容。
在 https://dwz.cn/mcLIfNKt 文章中,Spring Cloud Alibaba 开发团队推荐了三者的依赖关系
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
在这里将原来的SpringBoot替换为SpringCloud相关jar包,并导入
在这里我踩了关于nacos的坑,给大家说下
上面是关于springBoot还有Cloud相关的包 不解释了,主要是nacos的jar有两个,
(重要:nacos-discovery 为nacos注册中心的相关包,nacos-config为nacos配置中心的相关包, 我一开始以为这两个是一个东西)
还有一点要注意, < dependencyManagement> 这个标签的问题,大家要注意下,被此标签包住的jar是不会被下载的!!!(好多兄弟踩坑了)
修改yml文件
server:
port: 8899
spring:
cloud:
gateway:
routes:
- id: ReactiveCompositeDiscoveryClient_user-service
uri: lb://user-service
predicates:
- Path=/user-service/**
filters:
- RewritePath=/user-service/(?<remaining>.*), /${remaining} # 将 /user-service 前缀剔除
discovery:
locator:
enabled: true # 是否开启,默认为 false 关闭
url-expression: "'lb://' + serviceId" # 路由的目标地址的表达式,默认为 "'lb://' + serviceId"
# Nacos 作为注册中心的配置项
nacos:
discovery:
server-addr: 120.**.**.**:8848 # Nacos 服务器地址
在这里我将一个user-server注册进nacos的服务中心,再通过getway将请求转发至user-server
配置nacos的连接
由于nacos默认读取的是bootstrap.yaml 我们在项目中创建bootstrap.yaml文件,在这里我说下如果把nacos写进application.yaml里,nacos是读取不到的,在nacos源码里默认是读取bootstrap.yaml此文件,这个要注意。
spring:
cloud:
nacos:
discovery:
server-addr: 120.*.*.*:8848 # Nacos 服务器地址
在此说明,nacos可根据环境的不同,创建多个命名空间,进行环境的配置隔离等。bootstrap-dev.yaml为开发环境配置。
到此服务消费者已经搭建完毕。接下来开始搭建服务提供者(user-server)
在重新复制一个新的SpringBoot项目,将刚才的Getway的pom文件复制过就可以。
spring:
application:
name: user-service # Spring 应用名
cloud:
nacos:
# Nacos 作为注册中心的配置项
discovery:
server-addr: 120.**.**.**:8848 # Nacos 服务器地址 "'lb://'+serviceId"
server:
# port: ${random.int[10000,19999]} # 服务器端口。默认为 8080
port: 18081 # 服务器端口。默认为 8080
在这里将服务名(Spring应用名)注册进nacos服务中心,以及标注好端口
然后创建bootstrap.yaml 读取nacos的配置
spring:
application:
name: gateway-application
cloud:
nacos:
# Nacos Config 配置项,对应 NacosConfigProperties 配置属性类
config:
server-addr: 120.**.**.**:8848 # Nacos 服务器地址
namespace: a4674d5e-16a5-42f4-afbe-4ca59a6bad40 # 使用的 Nacos 的命名空间,默认为 null
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
name: gateway-application # 使用的 Nacos 配置集的 dataId,默认为 spring.application.name
file-extension: yaml # 使用的 Nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties
在这里要注意 file-extension 一定要是你nacos配置的后缀 Properties 和yaml一定要区分开,我看到还多人在这里踩坑。
随便写一个user的接口即可,等下测试使用
接下来直接启动项目,启动成功后,在nacos控制到能看到启动的服务
我们直接调用getway服务,开始测试
总结
以上就是本次搭建的Getway+nacos的微服务搭建的全部内容了,以下是大致流程总结,下一期出在linux上搭建redis教程。