一、创建项目
-
1、创建一个
spring-boot
的项目 -
2、创建三个模块
file
、system
、gateway
模块 -
3、
file
和system
分别配置启动信息,并且创建一个简单的控制器server.port=9000 spring.application.name=file server.servlet.context-path=/file
-
4、在根目录下引入依赖
<properties> <java.version>1.8</java.version> <spring-cloud.version>2021.0.8</spring-cloud.version> </properties> ... <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
-
5、在网关模块引入依赖包
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> </dependencies>
-
6、网关模块的
application.properties
配置server.port=8000 spring.application.name=gateway server.servlet.context-path=/gateway spring.main.web-application-type=reactive # 注册一个服务 spring.cloud.gateway.routes[0].id=system spring.cloud.gateway.routes[0].uri.=http://localhost:9001 spring.cloud.gateway.routes[0].predicates[0].name=Path spring.cloud.gateway.routes[0].predicates[0].args[0]=/system/** # 注册一个服务 spring.cloud.gateway.routes[1].id=file spring.cloud.gateway.routes[1].uri.=http://localhost:9000 spring.cloud.gateway.routes[1].predicates[0].name=Path spring.cloud.gateway.routes[1].predicates[0].args[0]=/file/**
-
7、分别启动三个项目,测试单独接口请求、使用网关的路由请求是否通的
http://localhost:9000/file/hello
http://localhost:9001/system/hello1
http://localhost:8000/file/hello
http://localhost:9000/system/hello1
二、nacos
的安装
-
1、官网地址下载,根据不同电脑系统下载不同包,解压进入到
bin
目录下,前提电脑上要安装jdk
# 我这边是window电脑 startup.cmd -m standalone
-
2、使用
docker
安装docker search nacos docker pull nacos/nacos-server
mkdir -p /home/docker/nacos/conf mkdir -p /home/docker/nacos/data mkdir -p /home/docker/nacos/logs chmod a+w /home/docker/nacos
docker run -it --name nacos \ -p 8848:8848 \ -e MODE=standalone \ -v /home/docker/nacos/conf/data:/home/nacos/conf/data \ -v /home/docker/nacos/conf/logs:/home/nacos/conf/logs \ -d nacos/nacos-server
如果需要认证的话,请添加
application.properties
文件docker run -it --name nacos \ -p 8848:8848 \ -e MODE=standalone \ -v /home/docker/nacos/conf/application.properties:/home/nacos/conf/application.properties \ -v /home/docker/nacos/conf/data:/home/nacos/conf/data \ -v /home/docker/nacos/conf/logs:/home/nacos/conf/logs \ -d nacos/nacos-server
三、使用nacos
做配置中心
-
1、在需要获取
nacos
的项目中添加依赖包<!-- nacos配置 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.2.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency>
-
2、在这里以
system
模块介绍,在resources
目录下创建一个bootstrap.properties
文件# 注册中心的名字 spring.application.name=system # 启动环境,nacos会根据环境来读取不同的配置dataId:system-dev.properties spring.profiles.active=dev # nacos的地址 spring.cloud.nacos.config.server-addr=localhost:8848 # 配置中心文件后缀名 spring.cloud.nacos.config.file-extension=properties
-
3、在
nacos
控制面板上创建一个配置文件test.nacos=hello1234566
-
4、在项目的
application.properties
中添加test.nacos
的配置,值随意server.port=9001 #spring.application.name=system server.servlet.context-path=/system test.nacos=hello
-
5、在
system
的控制器中获取配置文件package com.example.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RefreshScope public class HelloController { @Value("${test.nacos}") private String nacosName; @GetMapping("hello1") public String hello() { System.out.println(nacosName+"====="); return "System Hello"; } }
-
6、在
nacos
上修改配置文件查看是否获取到最新的配置数据
四、多环境配置
-
1、手动添加启动变量
-
2、配置生产启动
-Dspring.profiles.active=prod
-
3、在
nacos
中拷贝一份生产的配置文件 -
4、修改点
system-prod.properties
的数据,启动system
项目
- 5、请求接口看看配置文件读取的是否为生产的配置文件
五、命名空间
-
1、也许你一个公司就一个项目,那么在
nacos
直接使用public
这个默认的命名空间也可以,如果一个公司有多个项目,每个项目都有不同配置文件,这时候就要使用命名空间,简单理解就一个项目就是一个命名空间 -
2、比如我创建一个
test1
的命名空间,里面创建2个配置文件 -
3、在
spring-boot
项目中使用命名空间来读取配置文件# 注册中心的名字 spring.application.name=system # 启动环境,nacos会根据环境来读取不同的配置dataId:system-dev.properties spring.profiles.active=dev # nacos的地址 spring.cloud.nacos.config.server-addr=localhost:8848 # 配置中心文件后缀名 spring.cloud.nacos.config.file-extension=properties # 读取命名空间的配置 spring.cloud.nacos.config.namespace=test1
六、使用nacos
实现注册中心
-
1、因为所有的模块都要在
nacos
中注册,因此直接在跟模块下引入依赖包,上面的配置中心的依赖也可以全部到跟模块中引入<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency>
-
2、在
bootstrap.properties
文件中添加以下2行代码就可以# 服务注册 spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.cloud.nacos.discovery.namespace=test1
-
3、如果当前是网关模块就要多添加一个负载均衡的依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> </dependencies>
-
4、启动服务,查看
nacos
控制面板 -
5、多启动一台
system
的项目,只要在启动的时候修改启动端口号就可以
-
6、这时候就可以修改网关地址,由之前的
localhost
改为lb
的方式server.port=8000 spring.application.name=gateway server.servlet.context-path=/gateway spring.main.web-application-type=reactive # 注册一个服务 spring.cloud.gateway.routes[0].id=system #spring.cloud.gateway.routes[0].uri.=http://localhost:9001 spring.cloud.gateway.routes[0].uri=lb://system spring.cloud.gateway.routes[0].predicates[0].name=Path spring.cloud.gateway.routes[0].predicates[0].args[0]=/system/** # 注册一个服务 spring.cloud.gateway.routes[1].id=file #spring.cloud.gateway.routes[1].uri.=http://localhost:9000 spring.cloud.gateway.routes[1].uri=lb://file spring.cloud.gateway.routes[1].predicates[0].name=Path spring.cloud.gateway.routes[1].predicates[0].args[0]=/file/**
-
7、测试使用网关请求是否可以
七、完善openfeig
-
1、使用使用openfeig请求别的服务的方法
-
2、由之前的写法改为下面的写法
@FeignClient(name = "system", url = "http://localhost:9001/system") public interface FeignSystemHello { /** * 别的地方调用hell1方法的时候就会调用http://localhost:9001/system/hello路由 * @return */ @GetMapping("hello1") String hello1(); }
@FeignClient("system") public interface FeignSystemHello { @GetMapping("system/hello1") String hello1(); }
-
3、测试请求地址
http://localhost:8000/file/systemHello
-
4、上面可能会报错,需要再根目录的
pom.xml
中排除一个东西<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.3.RELEASE</version> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </exclusion> </exclusions> </dependency>
-
5、在
system
的测试控制器中使用环境变量获取当前端口@RestController @RefreshScope public class HelloController { @Value("${test.nacos}") private String nacosName; @Autowired Environment environment; @GetMapping("hello1") public String hello() { String port = environment.getProperty("local.server.port"); System.out.println(nacosName+"====="); return "System Hello" + port; } }
八、修改nacos
使用账号密码登录
- 1、修改
/nacos/conf/application.properties
-
2、但是开启登录功能就要配置下面的值,在线工具
nacos.core.auth.caching.enabled=true nacos.core.auth.server.identity.key=nacos nacos.core.auth.server.identity.value=nacos nacos.core.auth.plugin.nacos.token.secret.key=OGQ2ZTNmMDQ4MjVjNGQ0OTg4YzZjMGE1NDE4MDgwMTE=
-
3、进入桌面端再来修改账号和密码