启动nacos
配置中心
读取本地的配置文件
member模块
配置文件
//application.properties
test.nacos=Member
controller
@RestController
public class TestController {
private static final Logger LOG = LoggerFactory.getLogger(TestController.class);
@Value("${test.nacos}")
private String testNacos;
@GetMapping("/login")
public String login() {
return testNacos;
}
}
演示效果
读取nacos配置文件
nacos配置
父模块
依赖
//pom.xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2022.0.0.0-RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
member模块
依赖
<dependencies>
<!-- 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--SpringBoot 2.4版本之后 SpringCloud 2020,需要引入该依赖,才能读取bootstrap文件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
springcloud配置
bootstrap.properties
: 用于springcloudapplication.properties
: 用于springboot
// bootstrap.properties
# 注册中心的名字
spring.application.name=member
## 启动环境,nacos会根据环境读不同的配置dataId:member-dev.properties
spring.profiles.active=dev
## nacos server地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
## 配置中心文件后缀,默认properties
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.namespace=springCloud3
controller
@RefreshScope
: 用于实时刷新,在nacos编辑后,不用重启项目,就能看到更新
@RestController
@RefreshScope
public class TestController {
private static final Logger LOG = LoggerFactory.getLogger(TestController.class);
@Value("${test.nacos2}")
private String testNacos2;
@GetMapping("/login")
public String login() {
return testNacos2;
}
}
演示效果
总结
- nacos的配置等同于application.properties定义的配置
- nacos与application.properties存在同名的配置,nacos优化级更高
- nacos支持实时更改刷新
多环境配置
nacos
项目
配置
application-prod.properties
server.port= 18002
server.servlet.context-path=/member
spring.application.name=member
test.nacos=Member
项目启动配置
演示效果
注册中心
common模块
引入依赖
pom.xml
<!-- 注册中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
member模块
bootstrap.properties
增加下面代码
## nacos server注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.namespace=springCloud3
演示效果
gateway+nacos实现按路由名转发
gateway
pom.xml
<!-- 注册中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--SpringBoot 2.4版本之后 SpringCloud 2020,需要引入该依赖,才能读取bootstrap文件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
application.properties
server.port=8000
spring.cloud.gateway.routes[0].id=member
#spring.cloud.gateway.routes[0].uri=http://127.0.0.1:8002 //修改前
spring.cloud.gateway.routes[0].uri=lb://member //修改后
spring.cloud.gateway.routes[0].predicates[0]=Path=/member/**
spring.cloud.gateway.routes[1].id=business
spring.cloud.gateway.routes[1].uri=lb://business
spring.cloud.gateway.routes[1].predicates[0]=Path=/business/**
feign+nacos实现按应用名做远程调用
@FeignClient("business") //修改后
//@FeignClient(name = "business", url = "http://127.0.0.1:8003/business") //修改前
public interface BusinessFeign {
@GetMapping("/business/hello")
String hello();
}
负载均衡
gateway
pom.xml
增加依赖
<!--客户端负载均衡loadbalancer-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
member
controller
@RestController
@RefreshScope
public class TestController {
private static final Logger LOG = LoggerFactory.getLogger(TestController.class);
@Value("${test.nacos}")
private String testNacos;
@Autowired
Environment environment;
@Resource
BusinessFeign businessFeign;
@GetMapping("/hello2")
public String hello2() {
String port = environment.getProperty("local.server.port");
return String.format("Hello %s! 端口:%s", testNacos, port);
}
}
项目启动配置
nacos
演示效果
- 访问
http://127.0.0.1:8000/member/hello2
会按权重随机访问 启动的项目 - 访问
http://127.0.0.1:8002/member/hello2
会访问当前指定的启动项目
下图,因为下线了18001,并且8002与18002的权重相等,所以平均访问8002与18002