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.8java.version>
<spring-cloud.version>2021.0.8spring-cloud.version>
properties>
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
5、在网关模块引入依赖包
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-gatewayartifactId>
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
的项目中添加依赖包
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
<version>2.2.3.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-bootstrapartifactId>
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
项目
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.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
<version>2.2.3.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-bootstrapartifactId>
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.cloudgroupId>
<artifactId>spring-cloud-starter-gatewayartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-loadbalancerartifactId>
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.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
<version>2.2.3.RELEASEversion>
<exclusions>
<exclusion>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-ribbonartifactId>
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
使用账号密码登录/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、进入桌面端再来修改账号和密码