Week2Day1--Nacos

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注解的配置项,不需要任何修改,默认就可以自动刷新配置项

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值