springCloud-alibaba-nacos 的初始化demo 入门

什么是nacos?

Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心)、动态配置服务(可以做配置中心)、动态 DNS 服务。

官方介绍是这样的:
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。
官网地址

众所周知 分布式中有CAP之说 C 一致性 A高可用 P 分布式
CAP中只能选择两个,加之P是必选的,所以分布式又分为两大类 -> CP AP
Nacos 可以切换AP和CP两种方式,并且nacos集成了config,Ribbon等等的东西,就不需要每一个得去单独配置了
在项目开始搭建之前我们需要去阿里nacos的官网下载对应版本的nacos并运行起来
nacos下载官网页面
== 下载下来之后==
1.解压
2.进入bin目录运行
运行成功之后访问http://ip:8848如果能看到一下页面就代表运行成功
springCloud-alibaba-nacos 的初始化demo 入门_第1张图片
现在我们来搭建一个基于nacos的springcloud alibaba
项目的基本结构如下图
springCloud-alibaba-nacos 的初始化demo 入门_第2张图片
在最外面的包的maven



    4.0.0

    org.example
    SpringCloudAlibaba
    1.0-SNAPSHOT
    pom
    
        1.8
        2.2.2.RELEASE
        Finchley.RELEASE
        2.1.0.RELEASE
        2.2.0.RELEASE
    
    
        pamanet-boot
        consumer-boot
    
    
    
        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2.1.0.RELEASE
                pom
                import
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                Hoxton.SR1
                pom
                import
            
            
                org.projectlombok
                lombok
                1.16.18
                true
            
        
    



创建好这个之后,就可以开始创建子model了
先来创建payment (服务提供者)
maven



    4.0.0
    
        SpringCloudAlibaba
        org.example
        1.0-SNAPSHOT
    
    pamanet-boot
    0.0.1-SNAPSHOT
    pamanet-boot
    Demo project for Spring Boot

    
        1.8

    

    
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    


    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



需要在启动类上加一个这个注解
springCloud-alibaba-nacos 的初始化demo 入门_第3张图片
yml配置文件

server:
  port: 9001
spring:
  application:
    name: payment
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

management:
  endpoints:
    web:
      exposure:
        include: '*'

controller

@RestController
@CrossOrigin
public class PamentController {
    @GetMapping("/payment/{id}")
    public String getPayment(@PathVariable("id") String id) {
        return "success" + id;
    }
}

这样 一个payment model就搭建起来了

之后我们再来搭建一个调用payment服务的consumer

maven



    4.0.0
    
        SpringCloudAlibaba
        org.example
        1.0-SNAPSHOT
    
    consumer-boot
    0.0.1-SNAPSHOT
    consumer-boot
    Demo project for Spring Boot

    
        1.8
    

    
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



启动类上同时也需要有@EnableDiscoveryClient 注解
同时调用服务的话 我们用的是nacos集成的ribbon 所以有一个配置类


@Configuration
public class ApplicationContentConfig {

    @Bean
    @LoadBalanced  //负载均衡
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

controller


@RestController
@CrossOrigin
public class ConsumerController {
    @Resource
    RestTemplate restTemplate;
    @Value("${service-url.nacos-user-service}")
    private String serverUrl;

    @GetMapping("/consumer/payment/{id}")
    public String payment(@PathVariable("id") String id) {
        return restTemplate.getForObject(serverUrl + "/payment/"+id, String.class);

    }
}

配置文件 yml

server:
  port: 83

spring:
  application:
    name: consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

service-url:
  nacos-user-service: http://payment

这样一个调用方 consumer就完成了

然后是config

nacos的config确实做得非常好,在云端修改配置文件之后不用再去搞之前的一大堆东西才能刷新配置文件;这里改了之后加一个注解就立马刷新了配置



    4.0.0
    
        SpringCloudAlibaba
        org.example
        1.0-SNAPSHOT
    
    config
    0.0.1-SNAPSHOT
    config
    Demo project for Spring Boot

    
        1.8
    

    
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



同样要在启动类上加上@EnableDiscoveryClient注解
controller

@RestController
@RefreshScope//nacos 云端改了配置之后自动刷新 不用重启
public class ConfigController {
    @Value("${config.info}")
    String configInfo;

    @GetMapping("/config")
    public String getConfigInfo() {
        return configInfo;
    }
}

application.yml

spring:
  profiles:
    active: dev

bootstrap.yml

server:
  port: 3377
spring:
  application:
    name: config
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yaml


配置文件添加
springCloud-alibaba-nacos 的初始化demo 入门_第4张图片
添加配置文件的时候命名是有讲究的

name = spring.application.name + spring.profiles.active+.yaml

这样去nacos的控制台改了配置文件之后直接刷新就有了

你可能感兴趣的:(分布式)