nacos详解(一)

参考文章:https://help.aliyun.com/document_detail/72618.html?spm=a2c4g.11186623.6.995.288e118bBe4kxk

https://nacos.io/zh-cn/docs/what-is-nacos.html

什么是nacos?

服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:

Kubernetes Service

gRPC & Dubbo RPC Service

Spring Cloud RESTful Service

Nacos 的关键特性包括:

  • 服务发现和服务健康监测

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

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

  • 动态配置服务

    动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。

    动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

    配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。

    Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

  • 动态 DNS 服务

    动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。

    Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表.

  • 服务及其元数据管理

    Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

nacos地图

  • 特性大图:要从功能特性,非功能特性,全面介绍我们要解的问题域的特性诉求
  • 架构大图:通过清晰架构,让您快速进入 Nacos 世界
  • 业务大图:利用当前特性可以支持的业务场景,及其最佳实践
  • 生态大图:系统梳理 Nacos 和主流技术生态的关系
  • 优势大图:展示 Nacos 核心竞争力
  • 战略大图:要从战略到战术层面讲 Nacos 的宏观优势

Nacos 无缝支持一些主流的开源生态,例如

服务提供者

在本地创建服务提供者应用工程,添加依赖,开启服务注册与发现功能,并将注册中心指定为Nacos Server。

  1. 创建命名为nacos-service-provider的Maven工程。
  2. pom.xml文件中添加依赖。

以Spring Boot 2.1.4.RELEASE和Spring Cloud Greenwich.SR1为例,依赖如下:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.4.RELEASE</version>
    <relativePath/>
</parent>

<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>       

示例中使用的版本为Spring Cloud Greenwich,对应Spring Cloud Alibaba版本为2.1.1.RELEASE。

  • 如果使用Spring Cloud Finchley版本,对应Spring Cloud Alibaba版本为2.0.1.RELEASE。
  • 如果使用Spring Cloud Edgware版本,对应Spring Cloud Alibaba版本为1.5.1.RELEASE。
  1. src\main\java下创建Packagecom.aliware.edas
  2. 在Packagecom.aliware.edas中创建服务提供者的启动类ProviderApplication,并添加以下代码。

    其中@EnableDiscoveryClient注解表明此应用需开启服务注册与发现功能。

 package com.aliware.edas;

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

    @SpringBootApplication
    @EnableDiscoveryClient
    public class ProviderApplication {

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

在Packagecom.aliware.edas中创建EchoController

EchoController中,指定URL mapping为/echo/{string} ,指定HTTP方法为GET,从URL路径中获取方法参数,并回显收到的参数。

 package com.aliware.edas;

    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;

    @RestController
    public class EchoController {
        @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
        public String echo(@PathVariable String string) {
            return string;
        }
    }           

src\main\resources路径下创建文件application.properties,在application.properties中添加如下配置,指定Nacos Server的地址。

  spring.application.name=service-provider
    server.port=18081
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848       
  1. 其中127.0.0.1为Nacos Server的地址。如果您的Nacos Server部署在另外一台机器,则需要修改成对应的IP地址。如果有其它需求,可以在application.properties文件中增加配置。更多信息,请参见配置项参考

  1. 验证结果。
    1. 执行nacos-service-providerProviderApplicationmain函数,启动应用。
    2. 登录本地启动的Nacos Server控制台http://127.0.0.1:8848/nacos

      本地Nacos控制台的默认用户名和密码同为nacos。

    3. 在左侧导航栏选择服务管理 > 服务列表。

      可以看到服务列表中已经包含了service-provider,且在详情中可以查询该服务的详情。

服务消费者

本节除介绍服务注册的功能,还将介绍Nacos服务与RestTemplate和FeignClient两个客户端如何配合使用。

  1. 创建命名为nacos-service-consumer的Maven工程。
  2. pom.xml中添加依赖。
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.4.RELEASE</version>
    <relativePath/>
</parent>

<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>   
  1. src\main\java下创建Packagecom.aliware.edas
  2. 在Packagecom.aliware.edas中配置RestTemplate和FeignClient。
    1. 在Packagecom.aliware.edas中创建一个接口类EchoService,添加@FeignClient注解,并配置对应的HTTP URL地址及HTTP方法。
package com.aliware.edas;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient(name = "service-provider")
public interface EchoService {
    @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
    String echo(@PathVariable("str") String str);
}        

在Packagecom.aliware.edas中创建启动类ConsumerApplication并添加相关配置。

  • 使用@EnableDiscoveryClient注解启用服务注册与发现。
  • 使用@EnableFeignClients注解激活FeignClient。
  • 添加@LoadBalanced注解将RestTemplate与服务发现集成。
package com.aliware.edas;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

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

在Packagecom.aliware.edas中创建类TestController以演示和验证服务发现功能。

 package com.aliware.edas;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;

    @RestController
    public class TestController {

        @Autowired
        private RestTemplate restTemplate;
        @Autowired
        private EchoService echoService;

        @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)
        public String rest(@PathVariable String str) {
            return restTemplate.getForObject("http://service-provider/echo/" + str,
                    String.class);
        }

        @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)
        public String feign(@PathVariable String str) {
            return echoService.echo(str);
        }

    }           

src\main\resources路径下创建文件application.properties,在application.properties中添加以下配置,指定Nacos Server的地址。

  spring.application.name=service-consumer
    server.port=18082
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  1. 其中127.0.0.1为Nacos Server的地址。如果您的Nacos Server部署在另外一台机器,则需要修改成对应的IP地址。如果有其它需求,可以在application.properties文件中增加配置。更多信息,请参见配置项参考

  2. 验证结果。
    1. 执行nacos-service-consumerConsumerApplicationmain函数,启动应用。
    2. 登录本地启动的Nacos Server控制台http://127.0.0.1:8848/nacos

      本地Nacos控制台的默认用户名和密码同为nacos。

    3. 在左侧导航栏中选择服务管理 > 服务列表,可以看到服务列表中已经包含了service-consumer,且在详情中可以查询该服务的详情。

本地测试

在本地测试消费者对提供者的服务调用结果。

  • Linux/Unix/Mac系统:运行以下命令。
curl http://127.0.0.1:18082/echo-rest/rest-rest
curl http://127.0.0.1:18082/echo-feign/feign-rest
  • Windows系统:在浏览器中输入http://127.0.0.1:18082/echo-rest/rest-rest和http://127.0.0.1:18082/echo-feign/feign-rest。

配置项参考

 
配置项Key默认值说明
服务端地址spring.cloud.nacos.discovery.server-addrNacos Server启动监听的IP地址和端口。
服务名spring.cloud.nacos.discovery.service${spring.application.name}给当前的服务命名。
网卡名spring.cloud.nacos.discovery.network-interface当IP未配置时,注册的IP为此网卡所对应的IP地址。如果网卡名也未配置,则默认取第一块网卡的地址。
注册的IP地址spring.cloud.nacos.discovery.ip优先级最高。
注册的端口spring.cloud.nacos.discovery.port-1默认情况下不用配置,系统会自动探测。
命名空间spring.cloud.nacos.discovery.namespace常用场景之一是隔离不同环境的资源,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
Metadataspring.cloud.nacos.discovery.metadata使用Map格式配置,您可以根据自己的需求自定义一些和服务相关的元数据信息。
集群spring.cloud.nacos.discovery.cluster-nameDEFAULT配置成Nacos集群名称。
接入点spring.cloud.nacos.discovery.endpointUTF-8地域的某个服务的入口域名。通过此域名可以动态地获取服务端地址,此配置在部署到EDAS时无需填写。
是否集成Ribbonribbon.nacos.enabledtrue如果没有明确需求,不需要修改。

还可以参考nacos文档:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nacos配置中心的详细解释如下: 1. 配置管理:Nacos允许您将应用程序的配置集中管理,而无需重新部署或重启应用程序。您可以在Nacos的控制台中定义配置文件,然后在应用程序中使用Nacos的API动态获取这些配置。这样,您可以随时修改配置,而无需停止或重新部署应用程序。 2. 动态刷新:Nacos支持配置的动态刷新。当您在Nacos中修改了配置文件后,Nacos会自动通知正在使用该配置的应用程序,并触发配置的动态刷新。这意味着您可以在不重启应用程序的情况下更新配置,实现实时生效。 3. 一致性保证:Nacos使用了Raft协议来保证配置的一致性。当您修改配置时,Nacos会将修改请求广播给所有的Nacos节点,并通过Raft协议达成一致。这样可以确保所有节点上的配置都是一致的,避免了数据不一致的问题。 4. 服务注册与发现:除了配置管理,Nacos还提供了服务注册与发现功能。您可以将应用程序注册到Nacos中,并通过Nacos的API来发现其他已注册的服务。这样可以帮助您实现微服务架构中的服务自动发现和负载均衡。 5. 多种数据源支持:Nacos支持多种数据源,包括本地文件、数据库和远程配置中心。您可以选择将配置存储在不同的数据源中,以满足不同的需求。 6. API和控制台界面:Nacos提供了丰富的API和控制台界面,方便开发者进行配置的管理和监控。您可以通过API来进行配置的读写操作,并通过控制台界面来查看配置的状态和监控信息。 总而言之,Nacos配置中心是一个功能强大的分布式配置管理平台,它可以帮助开发团队实现配置的集中化管理、动态刷新和一致性保证,同时还提供了服务注册与发现功能。通过使用Nacos,您可以更好地管理和维护应用程序的配置,提高开发效率和系统稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值