• Spring Cloud Alibaba学习笔记:Nacos安装及服务注册与发现


    本篇要点

    • 简单了解Nacos提供的功能。
    • 简单介绍Nacos安装配置及启动。
    • 演示Nacos作为服务注册中心的用法。
    • Nacos与其他注册中心的对比。

    Nacos简介

    Nacos = (Dynamic) Naming and Configuration Service 注册中心+配置中心,也就是代替Eureka作为服务注册中心,替代Config作为配置中心,替代Bus作为消息总线。

    官方网站: http://nacos.io

    Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

    服务是Nacos中的头等公民。Nacos支持几乎所有类型的服务,入:Dubbo/gRPC,Spring Cloud RESTFUL服务或Kubernetes服务。

    Nacos主要提供的四种功能

    服务发现和服务运行状况检查

    Nacos使服务易于注册自己并通过DNS或HTTP接口发现其他服务。 Nacos还提供服务的实时运行状况检查,以防止向不正常的主机或服务实例发送请求。

    动态配置管理

    动态配置服务使您可以在所有环境中以集中和动态的方式管理所有服务的配置。 Nacos消除了在更新配置时重新部署应用程序和服务的需求,这使配置更改更加有效和敏捷。

    动态DNS服务

    Nacos支持加权路由,使您可以更轻松地在数据中心内的生产环境中实施中间层负载平衡,灵活的路由策略,流控制和简单的DNS解析服务。它可以帮助您轻松实现基于DNS的服务发现,并防止应用程序耦合到特定于供应商的服务发现API。

    服务和元数据管理

    Nacos提供了易于使用的服务仪表板,可帮助您管理服务元数据,配置,kubernetes DNS,服务运行状况和指标统计信息。

    Windows中Nacos下载及安装

    推荐下载稳定版本:Nacos1.3.1

    下载地址:https://github.com/alibaba/nacos/releases/tag/1.3.1

    下载之后,进入bin目录,cmd startup.cmd -m standalone启动单机模式。

    接着访问:http://localhost:8848/nacos/,账号密码都是nacos

    作为服务注册中心演示

    新建服务模块

    新建模块:cloudalibaba-provider-payment9001,引入依赖:

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

    编写yml配置

    server:
      port: 9001
    
    spring:
      application:
        name: nacos-payment-provider
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #配置Nacos地址
    
    management:
      endpoints:
        web:
          exposure:
            include: '*'
    

    主启动类

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

    Controller接口

    @RestController
    public class PaymentController {
        @Value("${server.port}")
        private String serverPort;
    
        @GetMapping(value = "/payment/nacos/{id}")
        public String getPayment(@PathVariable("id") Integer id) {
            return "nacos registry, serverPort: " + serverPort + "	 id" + id;
        }
    }
    

    测试

    启动nacos,启动9001服务,访问localhost:8848/nacos

    服务已经成功注册进nacos注册中心。

    演示负载均衡

    仿照9001模块再建一个9002模块,具体步骤就省略了,端口号改一改就可以。接着依次启动nacos,9001,9002,观察nacos服务注册中心的情况:

    nacos-payment-provider服务下包含了两个实例。

    新建消费者模块

    新建cloudalibaba-consumer-nacos-order83,依旧引入依赖:

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

    nacos默认支持负载均衡:是因为该依赖已经集成ribbon,故天然支持。

    编写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
    

    主启动类

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

    Controller接口

    @RestController
    @Slf4j
    public class OrderNacosController {
        @Resource
        private RestTemplate restTemplate;
    
        @Value("${service-url.nacos-user-service}")
        private String serverURL;
    
        @GetMapping(value = "/consumer/payment/nacos/{id}")
        public String paymentInfo(@PathVariable("id") Long id) {
            return restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class);
        }
    
    }
    

    配置类

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

    测试一下

    启动nacos,80消费者,9001,9002服务提供模块。

    访问:http://localhost:83/consumer/payment/nacos/1,将会轮询访问服务接口。

    Nacos与其他注册中心对比

    源码下载

    本系列文章为《尚硅谷SpringCloud教程》的学习笔记【版本稍微有些不同,后续遇到bug再做相关说明】,主要做一个长期的记录,为以后学习的同学提供示例,代码同步更新到Gitee:https://gitee.com/tqbx/spring-cloud-learning,并且以标签的形式详细区分每个步骤,这个系列文章也会同步更新。

  • 相关阅读:
    mybatis整合redis二级缓存
    python字符串非空判断
    mybatis源码分析之05一级缓存
    mybatis框架之动态代理
    Redis事件通知示例
    springboot2集成redis5报错:io.lettuce.core.RedisException: io.lettuce.core.RedisConnectionException: DENIED Redis is running in protected
    Centos7关闭防火墙
    mybatis源码分析之04Mapper接口的动态代理
    mybatis源码分析之03SqlSession的创建
    mybatis源码分析之02配置文件解析
  • 原文地址:https://www.cnblogs.com/summerday152/p/14091760.html
Copyright © 2020-2023  润新知