Nacos的使用

 

NACOS使用


naocs官方文档地址

使用nacos作为注册中心

  1. 启动nacos服务器

  2. application.yml 文件中要配置好 spring:application:name 配置模块的名字,两个模块之间联调需要使用名字

  3. 引入依赖

    <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
     </dependency>
       
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
  4. 配置nacos的服务地址

   spring:
     cloud:
       nacos:
         discovery:
           server-addr: 192.168.23.182:8848
  1. 对两个需要通讯的 服务主类使用 @EnableDiscoveryClient 来注册上nacos

  2. 对服务主类使用

    @EnableFeignClients(basePackages = "com.phc.phcstore.storemember.member.feign")
    

    来进行扫描feign的路径

  3. 编写编写声明式接口

    /**
     * @Author: PengHaiChen
     * @Description:
     * @Date: Create in 15:11 2021/6/22
     * feignClient这个注解的作用是声明这个是一个调用接口的类,对应的模块是store-coupon
     */
       
    @FeignClient("store-coupon")
    public interface CouponFeignService {
       
        /**
         * @RequestMapping 模块的接口路径
         * @return
         */
        @RequestMapping("/coupon/coupon/member/list")
        public R memberCoupons();
    }
    
  4. 对应的接口

    /**
     * 测试 open feign
     */
    @RequestMapping("/member/list")
    public R memberCoupons(){
        CouponEntity couponEntity = new CouponEntity();
        couponEntity.setCouponName("满200减少4000");
        return R.ok().put("coupons", Arrays.asList(couponEntity));
    }
    
  5. 使用open feign

    @Autowired
    CouponFeignService couponFeignService;
       
    /**
     * 使用 open feign
     * @return
     */
    @RequestMapping("/coupons")
    public R test(){
        MemberEntity memberEntity = new MemberEntity();
        memberEntity.setNickname("离歌");
       
        R memberCoupons = couponFeignService.memberCoupons();
        return R.ok().put("member",memberEntity).put("coupons",memberCoupons.get("coupons"));
    }
    

使用nacos作为配置中心

  1. 引入依赖

    <!--        nacos作为配置中心-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>		
    
  2. 创建一个bootstrap.properties文件

    spring.application.name=store-coupon
    spring.cloud.nacos.config.server-addr=192.168.23.182:8848
    

    第一个参数是模块名,第二个参数是nacos服务器位置

  3. 给配置中心添加一个配置管理,命名规则为 模块名字.properties ,给 应用名.propertise添加任何想要添加的配置

  4. 使用 @RefreshScope 来注解 动态获取并刷新配置

  5. 使用 @Value("${配置项的名 }") 来赋值

    @Value("${coupon.user.name}")
    private String name;
       
    @Value("${coupon.user.age}")
    private Integer age;
    
  6. 如果配置中心和当前应用的配置中都配置了相同的项,优先使用配置中心的配置

细节

  • 命名空间 : 配置隔离

    • 默认 public(保留空间) : 默认新增的所有配置都在public空间

    • 例如 开发 生产 测试 利用命名空间做环境隔离 需要在 bootstrap.properties中配置

      spring.cloud.nacos.config.namespace=e61bb082-d3f5-407e-a796-8a7c38a2b1ab
      

      参数为 命令空间ID

    • 基于服务之间进行隔离,让一个服务对应一个命名空间, 按照业务特性自己决定

  • 配置集 : 所有配置的集合

  • 配置集ID : 类似配置文件名,也就是 模块名字.properties

  • 配置分组 : 默认所有配置集都处于 DEFAULT_GROUPbootstrap.properties 中配置

    spring.cloud.nacos.config.group=组名
    
  • 最佳使用 每服务创建自己的命名空间,使用配置分组来区分环境

同时加载多个配置集

  • 微服务的任何配置,任何配置文件都可以放在配置中心中

  • 只需要在 bootstrap.properties 中说明加载那些配置文件即可

  • bootstrap.properties 中配置加载yml文件,这里将yml文件分成了很多份合并

  • Data Id Group
    store-coupon.properties dev
    datasource.yml dev
    mybatis.yml dev
    order.yml dev
  • 对应上图配置中心的 bootstrap.properties 配置代码

    spring.application.name=store-coupon
    spring.cloud.nacos.config.server-addr=192.168.23.182:8848
      
    spring.cloud.nacos.config.namespace=af3226ab-60ce-4b1d-bab8-3c5d79ec134b
    spring.cloud.nacos.config.group=dev
      
    spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
    spring.cloud.nacos.config.extension-configs[0].group=dev
    spring.cloud.nacos.config.extension-configs[0].refresh=true
      
    spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
    spring.cloud.nacos.config.extension-configs[1].group=dev
    spring.cloud.nacos.config.extension-configs[1].refresh=true
      
    spring.cloud.nacos.config.extension-configs[2].data-id=order.yml
    spring.cloud.nacos.config.extension-configs[2].group=dev
    spring.cloud.nacos.config.extension-configs[2].refresh=true
    
  • 配置中心有的优先使用配置中心的