栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Nacos注册中心&配置中心

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Nacos注册中心&配置中心

安装Nacos

安装启动后Nacos访问地址是 127.0.0.1:8848/nacos/index.html

登录名和密码默认都是 nacos

使用Nacos作为注册中心

版本对于自己去了解,我这里用的boot 2.3.2.RELEASE版本,spring cloud alibaba 2.2.5.RELEASE版本




  com.alibaba.cloud
  spring-cloud-starter-alibaba-nacos-discovery
  2.2.5.RELEASE


  org.springframework.boot
  spring-boot-starter-web

接下来在入口类的上面加上注解@EnableDiscoveryClient,实现服务的注册与发现。


@EnableDiscoveryClient
@SpringBootApplication
@RestController
public class NacosServerApplication {

    public static void main(String[] args) {
 SpringApplication.run(NacosServerApplication.class, args);
    }


    @GetMapping("/hello")
    public String hello(@RequestParam String name) {
 return "Hello " + name;
    }

}

配置文件application.yml中配置注册中心地址和服务注册到注册中心的名称

server:
  port: 7001
# 注册到注册中心服务的名称
spring:
  application:
    name: nacos-server
  # nacos 注册中心地址
  cloud:
    nacos:
      discovery:
 server-addr: 127.0.0.1:8848

启动后去Nacos注册中心查看,可以看到配置的服务注册到了注册中心

介绍三种服务的消费方式

这里不介绍RPC调用,分别介绍 spring 提供的 RestTemplate、WebClient 还有 Netflix 封装的 Feign一共三种方式。

RestTemplate 方式

首先新建一个新的服务用来调用nacos-server服务,新建的服务命名为nacos-client-common,配置关系和nacos-server一样

@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class NacosClientCommonApplication {

    // 需要@Autowired注入
    @Autowired
    private RestTemplate restTemplate;
  
  
  
    @GetMapping("/test1")
    public String test1() {
 return restTemplate.getForObject("http://nacos-server/hello?name=kangkang", String.class);
    }

    
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
 return new RestTemplate();
    }
}
WebClient 方式

WebClient 是 Spring5 响应式编程中类似 RestTemplate 调用服务的方式

# 需要引入依赖支持响应式编程


  org.springframework.boot
  spring-boot-starter-webflux

@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class NacosClientCommonApplication {
  
  	@Autowired
    private WebClient.Builder webClientBuilder;
  
    
    @GetMapping("/test2")
    public Mono test2() {
 return webClientBuilder.build()
  .get()
  .uri("http://nacos-server/hello?name=yunqing")
  .retrieve()
  .bodyToMono(String.class);
    }


    
    @Bean
    @LoadBalanced
    public WebClient.Builder loadBalancedWebClientBuilder() {
 return WebClient.builder();
    }
}
Feign 方式


  org.springframework.cloud
  spring-cloud-starter-openfeign
  2.2.6.RELEASE

// 加入下面这个注解,开始扫描 FeignClient 
@EnableFeignClients
@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class NacosClientCommonApplication {
  	// 注入服务的接口,需要把服务的接口声明在这个服务的项目中,实现还是在 nacos-server 中
  	@Autowired
    private FeignService feignService;
  
  	
    @GetMapping("/test3")
    public String test3() {
 return feignService.hello("spring cloud");
    }
}

服务的接口 FeignServer

// 注解指定了这个接口调用服务的名称
@FeignClient("nacos-server")
public interface FeignService {

    @GetMapping("/hello")
    String hello(@RequestParam String name);
}
Nacos作为配置中心 创建命名空间

首先需要在Nacos中新增两个命名空间,dev 和 test之后在每个命名空间下添加对应的配置。

如图所示还有一个保留空间public这是默认存在的,接下来在配置管理的配置列表中就可以看到三个命名空间,如下图所示,我在dev命名空间创建了一个配置。

如何定位一个配置
  1. 首先由命名空间namespace定位是哪个命名空间的配置,必须使用命名空间id,不配置默认使用public命名空间
  2. 前缀prefix确定了配置的名称,不配置默认为当前服务名称,这里我配置的也是当前服务名称
  3. 后缀file-extension确定了配置的后缀名,默认为properties,因为我的配置的Data Id创建为yaml格式的名为nacos-config.yaml所以这里的后缀需要写出为yaml
  4. 分组group确定了配置的组名,默认组名为DEFAULT_GROUP
  5. 也可以通过spring.profile.active或者group进行多环境配置,但是更推荐使用namespace
  • bootstrap.yml
# 此处配置必须用 bootstrap.yml 或者 bootstrap.properties
spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      config:
 server-addr: 127.0.0.1:8848
 file-extension: yaml # dataId由应用名称(name)加文件扩展名组成 nacos-config.yaml, 默认值为 properties
 group: DEFAULT_GROUP # 默认分组, 例如 DEV-GROUP  TEST-GROUP
 prefix: ${spring.application.name} # 前缀默认就是应用名称,不用配置,这里配置出来方便理解
 namespace: 87d915fc-e1be-4d0e-8dbd-d3314ac47844  # 命名空间


server:
  port: 7007
到底配置了什么?

实际上就配置了一个kangqing.title

读取配置详情

读取配置的目的是证明,通过配置中心添加的配置,能够在应用中生效,被读取到即能够生效



    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-config
    2.2.5.RELEASE


@RefreshScope
@RestController
@SpringBootApplication
public class NacosConfigApplication {

    public static void main(String[] args) {
 SpringApplication.run(NacosConfigApplication.class, args);
    }

    
    @Value("${kangqing.title:}")
    private String title;

    @GetMapping("/test")
    public String hello() {
 return "result -> " + title;
    }

}
多配置加载

例如我现在已经加载了nacos-config.yaml的配置,我不想把所有配置写到这一个文件中,于是我又在nacos中添加了mybatis-plus.yaml的配置,想要在应用中加载多个配置

方式一:
spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      config:
 server-addr: 127.0.0.1:8848
 namespace: 535d5ae5-de1e-443b-a0a7-68a34e52946d
 ext_config[0]:
   data-id: nacos-config.yaml
   group: DEFAULT_GROUP
   refresh: true
 ext_config[1]:
   data-id: mybatis-plus.yaml
   group: DEFAULT_GROUP
   refresh: true
方式二:
spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      config:
 server-addr: 127.0.0.1:8848
 namespace: 535d5ae5-de1e-443b-a0a7-68a34e52946d
 shared-configs:
   - nacos-config.yaml
   - mybatis-plus.yaml
 refresh-enabled: true

既然有多种配置方式,就存在优先级,最先的前缀后缀group定位的方式优先级最高,其次是方式一,最后是方式二,也就是方式二会被方式一覆盖,方式一会被前后缀group的方式覆盖。

  • 注:以上知识点均是本人基于单机版的nacos进行学习总结,并不适用于生产环境,生产环境请另行部署nacos集群和nacos数据持久化。
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号