springcloud-Nacos服务注册和配置中心01(十三)

Nacos简介

  • 是什么
  1. 一个更易于构建云原生应用的动态服务发现, 配置和服务管理平台.
  2. 简单来说, 就是注册中心+配置中心的综合(Eureka+Config+Bus)
  • 能干什么
  1. 替代Eureka做服务注册中心.
  2. 替代Config做服务配置中心.
  • 下载
  1. 选用1.1.4版本: https://github.com/alibaba/nacos/releases/tag/1.1.4
  2. 下载后, 解压安装包, 直接运行bin目录下的startup.cmd文件.
  3. 命令运行成功后, 访问http://localhost:8848/nacos, 默认账号密码: nacos

  • 各种注册中心的比较

 

 

Nacos作为服务配置中心

  • 基于Nacos的服务提供者
  1. 新建Module: cloudalibaba-provider-payment9001
  2. pom
    • 父pom
      <dependency>
              <groupId>com.alibaba.cloud</groupId>
              <artifactId>spring-cloud-alibaba-dependencies</artifactId>
              <version>2.1.0.RELEASE</version>
              <type>pom</type>
              <scope>import</scope>
          </dependency>
    • 本模块pom
      <dependencies>
              <dependency>
                  <groupId>com.alibaba.cloud</groupId>
                  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-actuator</artifactId>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-devtools</artifactId>
                  <scope>runtime</scope>
                  <optional>true</optional>
              </dependency>
              <dependency>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok</artifactId>
                  <optional>true</optional>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-test</artifactId>
                  <scope>test</scope>
              </dependency>
              <dependency>
                  <groupId>com.alibaba</groupId>
                  <artifactId>fastjson</artifactId>
                  <version>1.2.62</version>
              </dependency>
          </dependencies>
  3. yml
    server:
      port: 9001
    
    spring:
      application:
        name: nacos-payment-provider
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #配置Nacos地址
    
    management:
      endpoints:
        web:
          exposure:
            include: '*'
  4. 主启动类: @EnableDiscoveryClient
    @EnableDiscoveryClient
    @SpringBootApplication
    public class PaymentMain9001 {
        public static void main(String[] args) {
            SpringApplication.run(PaymentMain9001.class,args);
        }
    }
  5. 业务类
    @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;
        }
    }
  6. 测试
    • nacos控制台
  7. 参照9001新建9002, 为负载均衡做准备.
  • 基于Nacos的服务消费者
  1. 新建Module: cloudalibaba-consumer-nacos-order83
  2. pom
    • alibaba nacos
      <dependency>
              <groupId>com.alibaba.cloud</groupId>
              <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
          </dependency>
    • 为什么支持负载均衡
      • 因为nacos中有ribbon组件.
  3. yml
    server:
      port: 83
    
    spring:
      application:
        name: nacos-order-consumer
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
    
    #消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
    service-url:
      nacos-user-service: http://nacos-payment-provider
  4. 主启动
    @EnableDiscoveryClient
    @SpringBootApplication
    public class OrderNacosMain83
    {
        public static void main(String[] args)
        {
            SpringApplication.run(OrderNacosMain83.class,args);
        }
    }
  5. 业务类
    • config
      @Configuration
      public class ApplicationContextConfig {
      
          @Bean
          @LoadBalanced
          public RestTemplate getRestTemplate() {
              return new RestTemplate();
          }
      }
    • controller
      @RestController
      @Slf4j
      public class OrderNacosController {
      
          @Resource
          private RestTemplate restTemplate;
      
          @Value("${service-url.nacos-user-service}")
          private String serverURL;
      
          @GetMapping("/consumer/payment/nacos/{id}")
          public String paymentInfo(@PathVariable("id") Long id) {
              return restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class);
          }
      }
  6. 测试
    • 访问 http://localhost:83/consumer/payment/nacos/11
      • 83访问9002/9001, 轮询负载成功.
  • 服务注册中心对比
  1. Nacos全景生态图
  2. Nacos与其他注册中心详细对比
  3. Nacos支持AP和CP的切换.
    • C是所有节点在同一时间看到的数据是一致的, 而A的定义是所有请求都会收到响应.
    • 一般来说, 如果不需要存储服务级别的信息且服务实例是通过nacos-client注册, 并能够保持心跳上报, 那么就选择AP模式, 当前主流的服务如SpringCloud, Dubbo都适用于AP模式, AP模式为了服务的可能性而减弱了一致性, 因此AP模式下只支持注册临时实例.
    • 如果需要在服务级别编辑或存储配置信息, 那么CP是必须, K8S服务和DNS服务则适用于CP模式.
      • CP模式下支持注册持久化实例, 此时以Raft协议为集群运行模式, 该模式下注册实例之前必须先注册服务, 如果服务不存在, 则返回错误.
    • 切换指令: curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
posted @ 2020-07-08 11:12  yellowstreak  阅读(269)  评论(0编辑  收藏  举报