SpringCloud Nacos服务注册和配置中心

SpringCloud Nacos服务注册和配置中心

SpringCloud Nacos服务注册和配置中心_第1张图片
在这里插入图片描述

简介

1. 为什么叫Nacos :

前四个字母分别是Naming 和 Configuration 的前两个字母,最后的s为Service。

Nacos 就是注册中心 + 配置中心的组合

Nacos 官网 :https://nacos.io/zh-cn/

GitHub:https://github.com/alibaba/Naco


  • Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。

  • Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。


    SpringCloud Nacos服务注册和配置中心_第2张图片
    在这里插入图片描述
安装并运行nacos

在docker上安装nacos

拉取nacos镜像:

docker pull nacos/nacos-server

运行nacos:

docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server

在浏览器输入:http://ip地址:8848/nacos/
账号和密码都是nacos。

SpringCloud Nacos服务注册和配置中心_第3张图片
在这里插入图片描述

SpringCloud Nacos服务注册和配置中心_第4张图片
在这里插入图片描述

Nacos作为服务注册中心演示

官方文档:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html

提供者
  1. 新建模块cloudalibaba-provider-payment9001
  2. pom

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

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

    
        org.springframework.boot
        spring-boot-starter-actuator
    

    
        org.springframework.boot
        spring-boot-devtools
        runtime
        true
    
    
        org.projectlombok
        lombok
        true
    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    

  1. yml
server:
  port: 9001


spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: 120.92.164.250:8848  #配置的Nacos地址(本机的写localhost:8848,服务器的写IP地址)


management:
  endpoints:
    web:
      exposure:
        include: '*'
  1. 主启动类
@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001 {

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

}

  1. 新建controller包,包下新建PaymentController
@RestController
public class PaymentController {

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


    @GetMapping("/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id){
        return "nacos registry, serverPort: " + serverPort + "\t id: " + id;
    }

}

  1. 启动9001
SpringCloud Nacos服务注册和配置中心_第5张图片
在这里插入图片描述
消费者 (整合Feign)
  1. 新建 cloudalibaba-consumer-nacos-order83
  2. pom

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
        
            com.angenin.springcloud
            cloud-api-commons
            ${project.version}
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-actuator
        

        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
    
  1. 建yml
server:
  port: 83


spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 120.92.164.250:8848  #配置的Nacos地址(本机的写localhost:8848,服务器的写IP地址)


#消费者要访问的微服务名称(成功注册进nacos的服务提供者)
service-url:
  nacos-user-service: http://nacos-payment-provider
  1. 主启动类
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class OrderNacosMain83 {

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

}
  1. 新建 feign包 ,包下新增接口 PaymentFeignService
@Component
@FeignClient(value = "nacos-payment-provider")
public interface PaymentFeignService {

    @GetMapping("/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id);

}

  1. 新建controller
@RestController
public class OrderNacosController {

    @Resource
    private PaymentFeignService paymentFeignService;

    @GetMapping("/consumer/payment/feign/nacos/{id}")
    public String paymentInfo2(@PathVariable("id") Integer id){
        return paymentFeignService.getPayment(id);
    }

}
  1. 启动


    SpringCloud Nacos服务注册和配置中心_第6张图片
    在这里插入图片描述

服务注册中心对比

Nacos全景图


SpringCloud Nacos服务注册和配置中心_第7张图片
在这里插入图片描述

Nacos和CAP(同时支持 cp + ap)


SpringCloud Nacos服务注册和配置中心_第8张图片
在这里插入图片描述

SpringCloud Nacos服务注册和配置中心_第9张图片
在这里插入图片描述

AP 和 CP的切换

A : 可用性 B:一致性 C: 分区容错性

  • C是所有节点在统一时间看到的数据是一致的;而A的定义是所有的请求都会收到响应

如何选择模式:

  • 一般来说,如果不需要存储服务级别的信息且服务实例都是通过 nacos-client 注册,并且能够保持心跳上报,那么就可以选择AP 模式,当前主流的服务如 SpringCloud 和 Dubbo 服务,都适用与AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下支持注册临时节点
  • 如果需要在服务界别编辑 或者存储配置信息,那么CP是必须,K8S服务和DNS服务则适用于CP模式,CP模式下则支持持久化实例,此时则是以Raft 协议为集群模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误

Nacos默认AP。


Nacos作为服务配置中心演示

  1. 新建cloudalibaba-config-nacos-client3377
  2. pom

    
    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-config
    
    
    
        org.springframework.cloud
        spring-cloud-starter-openfeign
    
    
    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-discovery
    
    
        org.springframework.boot
        spring-boot-starter-web
    

    
        org.springframework.boot
        spring-boot-starter-actuator
    

    
        org.springframework.boot
        spring-boot-devtools
        runtime
        true
    
    
        org.projectlombok
        lombok
        true
    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    

  1. yml
SpringCloud Nacos服务注册和配置中心_第10张图片
image

bootstrap.yml:

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: 120.92.164.250:8848 #Nacos服务注册中心地址(本机的写localhost)
      config:
        server-addr: 120.92.164.250:8848 #Nacos作为配置中心地址(本机的写localhost)
        file-extension: yml #指定yml格式配置

application.yml

spring:
  profiles:
    active: dev #表示开发环境

  1. 启动类
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377 {

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

}

  1. 新建controller 包,ConfigClientController类
@RefreshScope   //支持Nacos的动态刷新功能
@RestController
public class ConfigClientController {

    @Value("${config.info}")
    private String configInfo;


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

}

  1. 在Nacos中添加配置信息

官网:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

SpringCloud Nacos服务注册和配置中心_第11张图片
`

[图片上传失败...(image-2005fc-1599976084202)]


SpringCloud Nacos服务注册和配置中心_第12张图片
在这里插入图片描述

SpringCloud Nacos服务注册和配置中心_第13张图片
在这里插入图片描述
  1. 启动3377
    浏览器输入:http://localhost:3377/config/info

[图片上传失败...(image-475b50-1599976084202)]
实时刷新

[图片上传失败...(image-76055a-1599976084202)]

Nacos作为配置中心——分类配置

实际开发中,通常一个系统会准备

  • dev开发环境
  • test测试环境
  • prod生产环境
SpringCloud Nacos服务注册和配置中心_第14张图片
在这里插入图片描述
Namespace+Group+DataID三者的关系
  1. 介绍

类似Java里面的package名和类名
最外层的nameSpace是可以用于区分部署环境的,Group和DataID逻辑是那个区分两个目标对象

SpringCloud Nacos服务注册和配置中心_第15张图片
在这里插入图片描述

Data ID 区分

SpringCloud Nacos服务注册和配置中心_第16张图片
在这里插入图片描述

Group 区分

SpringCloud Nacos服务注册和配置中心_第17张图片
在这里插入图片描述

SpringCloud Nacos服务注册和配置中心_第18张图片
在这里插入图片描述

Namespace方案

SpringCloud Nacos服务注册和配置中心_第19张图片
在这里插入图片描述

SpringCloud Nacos服务注册和配置中心_第20张图片
在这里插入图片描述

SpringCloud Nacos服务注册和配置中心_第21张图片
在这里插入图片描述
  • 个人博客: http://blog.yanxiaolong.cn/

你可能感兴趣的:(SpringCloud Nacos服务注册和配置中心)