springCloudAlibaba之nacos

文章目录


前言

为什么要学习和使用springcloud Alibaba ?
因为springcloud的很多组件是由Netflix公司所提供,而且组件大多都进入维护时期,所以随着时间的不停推进,我们就需要一种更为合适的组件来进行开发,而springcloud Alibaba 就应运而生。

一、nacos是什么?

官网路径: https://nacos.io/zh-cn/docs/what-is-nacos.html.
github路径:https://github.com/alibaba/spring-cloud-alibaba.
以下是官网的解释
springCloudAlibaba之nacos
简而言之:Nacos可以提供服务的注册与发现(替代Eureka,consul,zookeeper之类的),和统一配置管理(代替config)。相当于一个组件替代了两个组件,更为便捷。

二、作为注册中心

1.安装nacos

下载地址:https://github.com/alibaba/nacos/releases.
学习期间使用windows版本,建议使用linux版
本次使用是nacos-server-1.3.2.zip。
下载后解压
springCloudAlibaba之nacos
进入bin目录,进入命令提示框,输入startup.cmd,启动。默认端口8848(珠峰的高度)
springCloudAlibaba之nacos
访问:http://localhost:8848/nacos/#/login
登录名/密码: nacos/nacos
springCloudAlibaba之nacos

2.配置客户端微服务

我们此时配置两台服务提供,一台服务消费,用于测试。

1.引入库

<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

官网截图:

2.修改配置文件

application.yml

server:
  port: 9001
spring:
  application:
    name: nacos-provider-payment
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
management:
  endpoints:
    web:
      exposure:
        include: "*"

github官网:
springCloudAlibaba之nacos

3.主启动类

@SpringBootApplication
@EnableDiscoveryClient
public class ProviderNacosMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(ProviderNacosMain9001.class,args);
    }
}

4.服务提供的业务类

ProviderController

@RestController
@RequestMapping("/provider")
public class ProviderController {

    @Value("${server.port}")
    public String port;

    @GetMapping("/getPort/{id}")
    public String getPort(@PathVariable("id") String id){
        return "调用Provider服务成功,端口:"+port+"id:"+id;
    }
}

5.服务消费的业务类

使用restTemplate调用其他服务。

ApplicationContextConfig

@Configuration
public class ApplicationContextConfig {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return  new RestTemplate();
    }
}

ConsumerController

@RestController
@RequestMapping("/consumer")
public class ConsumerController {

    @Autowired
    public RestTemplate restTemplate;

    @GetMapping("/getPort/{id}")
    public String getPort(@PathVariable("id") String id){

        return  restTemplate.getForObject("http://nacos-provider-payment/provider/getPort/"+id,String.class);
    }
}

3.测试

配置一台服务83,消费配置两台客户端服务提供9001,9002,三台微服务全部注册在nacos。

springCloudAlibaba之nacos
第一次访问:http://localhost:83/consumer/getPort/13
springCloudAlibaba之nacos
第二次访问:http://localhost:83/consumer/getPort/13
springCloudAlibaba之nacos
通过以上测试发现,nacos支持负载均衡,这是为什么呢?
答案就是:nacos集成了ribbon。
springCloudAlibaba之nacos
Ribbon学习链接: https://blog.csdn.net/qq_33788786/article/details/111566622.

二、作为配置中心

nacos安装步骤省略

1. 引入pom

<dependency>
   	<groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.修改配置文件

nacos作为配置中心时,其他微服务的配置文件同样支持两种,bootstrap.yml和application.yml这两种配置文件的加载顺序时bootstrap优先于application的,两个文件合起来就是微服务的配置文件信息。

bootstrap.yml

server:
  port: 9001
spring:
  application:
    name: nacos-provider-payment
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
management:
  endpoints:
    web:
      exposure:
        include: "*"

application.yml

spring:
  profiles:
    active: dev

4.主启动类

@SpringBootApplication
@EnableDiscoveryClient
public class ProviderNacosMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(ProviderNacosMain9001.class,args);
    }
}

5.业务类

ProviderController.java
springCloudAlibaba之nacos

6.nacos配置文件

在nacos上发布配置文件nacos-provider-payment-dev.yaml
springCloudAlibaba之nacos
重点:
1.DATA ID的配置规则如下
springCloudAlibaba之nacos
根据上述的配置规则,配置nacos配置文件的DATA ID
2.group分组
DEFAULT_GROUP是nacos提供的一个默认分组,也可以手动创建其他分组,它的作用,在后面会提到。

6.测试

访问:http://localhost:9001/provider/getInfo

springCloudAlibaba之nacos
顺利拿到信息。

重点!!!
nacos也支持配置文件的动态加载,只需要在上面的业务类上配置@RefreshScope注解即可完成,当你在nacos客户端更新完成之后,微服务会自动刷新配置,在此处我就不在测试了。

7.nacos作为配置中心须知

nacos作为配置中心时还提供了命名空间(namespace),分组 (group)的隔离手段。

(1)namespace(命名空间)用于隔离不同租户的配置。在不同的命名空间中,组和数据ID可以相同。命名空间的典型场景是隔离不同环境的配置,例如,开发/测试环境与生产环境(配置和服务等)之间的隔离。
在nacos管理台创建命名控件。如下:test
springCloudAlibaba之nacos
namespace创建之后就会在配置文件菜单看到如下
springCloudAlibaba之nacos

(boostarp.yml)配置文件:
spring.cloud.nacos.config.namespace = eb36721e-8591-42f8-9bfc-169ed4615f22
这个值就是命名空间创建时的id

(2)group(分组)是一个可以自定义的隔离。
在nacos管理台创建命名控件。如下:TEST_GROUP
springCloudAlibaba之nacos
(boostarp.yml)配置文件:
spring.cloud.nacos.config.group = TEST_GROUP

ps:
nacos可以支持共享配置,多文件配置等等配置项,不在此处一一展示。
更多配置可以参考官网:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config-en.

上一篇:微服务架构-SpringCloudAlibaba-093:Nacos实现服务注册与发现


下一篇:浅谈GPU虚拟化技术(五):GPU图形渲染虚拟化的业界难题-VDI的用户体验