1.Nacos概述
2.Nacos是什么?
Na:即注册与发现中心
Co:即配置中心
Service:是指注册中心/配置中心都是以服务为核心
3.Nacos安装与启动
1:解压乐哥nacos-serve-2.1.0.zip到当前目录
注意:目录不能有中文,空格
2:使用cmd进入bin目录,找到startup.cmd,使用下面的命令
startup.cmd -m standalone
3:浏览器进入控制台地址:http://localhost:8848/nacos
4:用户名和密码默认都是nacos
4.在SpringCloud中怎么用Nacos
1:在cloud-services一级模块里导入Nacos Maven依赖 (注册组件依赖)
<!-- Nacos整合Spring Cloud服务的注册中心组件 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2:编写配置项,将order和storage的两个子模块注册到Nacos注册中心
编写两个子模块的application.yml文件
storage子模块:
spring:
application:
# spring.application.name是注册到注册中心的服务名称
name: storage-service
cloud:
nacos:
discovery:
# spring.cloud.nacos.discovery.server-addr是Nacos注册中心地址
server-addr: localhost:8848
order子模块:
spring:
application:
#spring.application.name是注册到Nacos注册中心的名称
name: order-service
cloud:
nacos:
discovery:
#spring.cloud.nacos.discovery.server-addr是Nacos注册中心地址
server-addr: localhost:8848
3:启动两个服务查看Nacos中心服务管理==>服务列表是否有这两个服务
5.使用OpenFeign调用远程服务
1:在Order订单服务(消费者)里导入OpenFeign依赖和负载均衡组件(不常用)
<!-- OpenFeign: 声明式HTTP客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 负载均衡组件 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
2:在Order(服务消费者)的启动类上增加注解@EnableFeignClinets 自动配置OpenFeign,并为远程服务接口创建对象
@SpringBootApplication
@MapperScan(basePackages = "com.etoak.**.mapper")
@EnableTransactionManagement
@EnableFeignClients // 自动配置OpenFeign, 并为OpenFeign接口创建代理对象
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
3:开发远程接口(添加一个要调用的HTTP服务的接口) ,在Order消费者创建一个远程接口
4:注入服务接口的代理对象,添加@FeignClient(value = "storage-service")注解(name或value属性值: 服务提供者(被调用的服务)的服务名称
),调用代理对象的方法即可 storage已在nacos上注册
5.1Post请求+form参数
JSON,路径上的参数,(消费方加)
Java Bean加注解@SpringQueryMap,参数,基本数据类型和String加@RequestParam(name参数写上)(消费方加)
服务消费方:
/**
*post + form请求
*参数如果是基本数据类型和String
*都必须在参数前加上@RequestParam注解,并设置value属性的值
*
/
@PostMapping("/storage/deduct")
Result deduct(@RequestParam("productCode") String productCode,
@RequestParam("count") int count);
服务提供方
PostMapping("/deduct")
public Result deduct(@RequestParam String productCode,@RequestParam int Count){
storageService.deduct(productCode, count);
return ResultVO.success();
}
服务消费方
/**
*参数如果是Java Bean, 需要在Java Bean前边加上@SpringQueryMap
/
@PostMapping("/storage/deduct2")
ResultVO deduct2(@SpringQueryMap Storage storage){
}
服务提供方
/** post + form参数(Java Bean接收) */
@PostMapping("/deduct2")
public ResultVO deduct2(Storage storage){
storageService.deduct(storage.getProductCode(), storage.getCount());
return ResultVO.success();
}
5.2post请求+JSON参数
服务消费方
/**
* post + json参数
* 如果是JSON参数, 则不需要做任何修改
*/
@PostMapping("/storage/json/deduct")
ResultVo deduct3(@RequestBody Storage storage){
}
服务提供方
/** POST + JSON */
@PostMapping("/json/deduct")
public Result decuct(@RequestBody Storage storage){
storageService.deduct(storage.getProductCode(), storage.getCount());
return ResultVO.success();
}
5.3Get请求
服务消费方
@GetMapping("/storage/get")
ResultVO getStorage(@RequestParam("productCodeCode") String productCode);
服务提供方
@GetMapping("get")
public ResultVo getStorage(@RequestParam String productCode){
Storage storage = storageService.getByProductCode(productCode);
return ResultVO.success(storage);
}
5.4请求路径的参数
服务消费方
@GetMapping("/storage/{productCode}")
ResultVO getStorage(@PathVariable String productCode);
服务提供方
@GetMapping("/{productCode}")
public ResultVO getStorage2(@PathVariable String productCode) {
Storage storage = storageService.getByProductCode(productCode);
return ResultVO.success(storage);
}
6.Nacos配置中心的管理
配置项:application.yml里面的每一个配置,如:spring.application.name/spring.cloud.nacos.discovery.server-addr
配置集:每个服务的application.yml文件就是一个配置集
配置集id:配置集id命名规范
Data ID命名规范:${prefix}-${spring.profile.active}.${file-extension}
${prefix}:默认值:服务名称,配置项${apring.application.name}的值
修改:spring.cloud.nacos.config.prefix进行修改
${spring.profile.active}:没有默认值
如果没有这一项,那么前面的-横杠也没有,此时的Data ID:${prefix}.{file-extension}
${file-extension}:默认值:properties
修改:通过spring.cloud.nacos.config.file-extension配置项进行修改
server:
port: 8002
spring:
application:
name: config-service
profiles:
# spring.profiles.active = dev
# npm run serve .env.development request baseURL = process.env.VUE_APP_XX_URL
# npm run build .env.production
active: dev
cloud:
nacos:
# 注册与发现中心
discovery:
server-addr: localhost:8848
# 配置中心
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
# Data ID prefix:默认值就是服务名称
prefix: ${spring.application.name}
file-extension: yml
7.Nacos如何持久化
1:创建数据库
2:在nacos_config数据中创建表,表结构脚本文件 :nacos/conf/nacos-mysql.sql
3:修改nacos/conf/application.properties
4:重启Nacos
5:可能出现的错误
8.动态刷新配置中心的配置项
1:刷新使用@Value获取的配置项,需要在类上使用注解@RefreshScope
@RestController
@RequestMapping("/user")
// 刷新使用@Value获取的配置中心的配置项
@RefreshScope
public class UserController {
@Value("${user.id}")
private int id;
@Value("${user.name}")
private String name;
@Autowired
UserProperties userProperties;
@RequestMapping("/get")
public ResultVO get() {
Map<Object, Object> map = MapUtil.builder()
.put("id", this.id)
.put("name", this.name)
.build();
return ResultVO.success(map);
}
}
2:刷新使用@ConfigurationProperties注解的配置项,不需要任何修改,默认就可以自动刷新配置项