zoukankan      html  css  js  c++  java
  • 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 + "	 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'
  • 相关阅读:
    C#中使用事务
    C#中执行数据库存储过程
    构建ASP.net的AJAX开发环境
    C#开发数据库技巧汇总
    索引的作用及其使用
    C#中的多态性
    C#中调用C++的DLL
    不借助其它变量交换两变量值
    ASP.NET页面间传值的9种方式
    TERSUS无代码开发(笔记11)TERSUS框架学习框架基本信息修改
  • 原文地址:https://www.cnblogs.com/binwenhome/p/13265799.html
Copyright © 2011-2022 走看看