首页 > 其他分享 >Nacos

Nacos

时间:2023-08-11 16:11:17浏览次数:46  
标签:服务 spring 配置 Nacos nacos config cloud

就是专门用来做:

  • 注册中心: 就是避免增删服务时,修改配置文件。

    它又包含服务注册:服务提供者,启动的时候向注册中心上报自己的网络信息;服务发现:服务消费者,启动的时候向注册中心上报自己的网络信息,还会拉取服务提供者的相关网络信息。

  • 配置中心: 就是动态更新服务的配置文件。

    把一些统一的配置(数据库配置)放到配置中心,当服务启动的时候会从配置中心获取配置。

  • 元数据: 就是服务的一些自定义属性。

nacos-stru.drawio2

Docker 运行

下面是一个最简单的命令,用来做本地测试的:

$ docker run -d -e PREFER_HOST_MODE=hostname -e MODE=standalone -p "8848:8848" -p "9848:9848" nacos/nacos-server:v2.2.0-slim

项目配置

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- 服务注册和发现 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
    <!-- 动态外部化配置 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
</dependencies>

bootstrap.yaml 文件的配置,这个配置文件优先于 application.yaml 加载:

spring:
  application:
    # 服务名称
    name: 
  cloud:
    nacos:
      discovery:
        # Nacos ip:port
        server-addr:

@EnableDiscoveryClient 注解可以不用了,因为 Spring Boot 会自动配置,保证服务启动后会自动注册到 Nacos。

服务注册中心

在 spring-cloud-starter-alibaba-nacos-discovery 启动器里面有一个 NacosServiceRegistryAutoConfiguration 类,[Spring Boot 启动](../Spring Boot/自动装配原理&启动流程.md)的时候会通过这个自动配置类创建 NacosServiceRegistry 实例,这个实例最终会委托给 NamingGrpcClientProxy#registerService 方法注册服务。

可以使用 DiscoveryClient、Loadbalancer 调用服务,使用 Nacos 自带的 NacosLoadBalancer:

import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.loadbalancer.NacosLoadBalancer;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;

public class NacosLoadBalancerConfiguration {
    @Bean
    public ReactorLoadBalancer<ServiceInstance> nacosLoadBalancer(Environment environment,
                                                                  LoadBalancerClientFactory loadBalancerClientFactory,
                                                                  NacosDiscoveryProperties nacosDiscoveryProperties) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        return new NacosLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name, nacosDiscoveryProperties);
    }
}

下面是常用的一些配置:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: # ip:port
        username: # 鉴权,用户名
        password: # 鉴权,密码
        logName: # 日志名称
        # 目前从 Spring Cloud 客户端和 Dubbo 客户端都没有打通, 所以不能生效.
        # 对于 Spring Cloud 客户端, 应用可以实现 Ribbon 的负载均衡器来进行权重过滤.
        weight: 1 # 服务实例的权重,值越大权重越大。
        clusterName: # 集群名称
        # 命名空间 常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等
        namespace: ba42e722-81aa-48f1-9944-9dca57d5f396
        group: # 可以理解为某个项目中的某个服务,它和 namespace 没有指定格式,按照自己的理解配置
        metadata: # 服务注册时的自定义数据
          k1: v1

服务配置中心

使用 bootstrap.yaml 配置文件来配置:

spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      config:
        server-addr: 192.168.112.128:8848
        file-extension: yaml
        group: dev
        namespace: 

从配置中心拉取下来的配置都是保存在 Spring Environment 中,默认情况是支持动态刷新的,但是可以通过 spring.cloud.nacos.config.refresh.enabled=false 关闭动态刷新。

下面是常用的一些配置:
spring.cloud.nacos.config.shared-configs[0].data-id=shared-redis.properties
spring.cloud.nacos.config.shared-configs[0].group=dev
spring.cloud.nacos.config.shared-configs[0].refresh=false

不同级别的配置

通过 DataId 从配置中心获取或监听配置文件,DataId 有二种配置格式,客户端只会获取或监听一个满足格式的文件:

${spring.application.name}-${profile}.${file-extension:properties}
${spring.application.name}.${file-extension:properties}

${profile} 对应的就是下面这个配置,这个配置不存在第一种 DataId 格式也不会存在:

spring:
  profiles:
    active: product

自定义命名空间

每个命名空间中可以有多个组,每个组中又可以有多个 DataId;命名空间可以理解为 Java 中的包。

如果 bootstrap.yaml 配置文件中没有指定 namespace,则会使用 Nacos 自带的 "Public" 命名空间:

spring:
  cloud:
    nacos:
      config:
        namespace: b3404bc0-d7dc-4855-b519-570ed34b62d7

如果 bootstrap.yaml 配置文件中没有指定 spring.cloud.nacos.config.group,默认使用 DEFAULT_GROUP:

spring:
  cloud:
    nacos:
      config:
        group: DEVELOP_GROUP

获取或监听多个 DataId:

spring:
  cloud:
    nacos:
      config:
        extension-configs:
          -
            dataId: ssss.yaml
            group: DEFAULT_GROUP
            refresh: true
          -
            dataId: 111.yaml

参考资料

Nacos架构&原理.pdf

微服务开发指南.pdf

标签:服务,spring,配置,Nacos,nacos,config,cloud
From: https://www.cnblogs.com/jnyyxz/p/17623199.html

相关文章

  • 18-Nacos-NacosRule负载均衡
    服务发现的代码与eureka的一模一样,也因此ribben的负载均衡策略也是与之前保持一致的,也就是说在什么都不配置的情况下,应该是轮询策略[无视集群]如果想要集群生效,如下:userservice:ribbon:NFLoadBalancerRuleClassName:com.alibaba.cloud.nacos.ribbon.NacosRule#负......
  • nacos的 Spring Security 身份认证绕过漏洞
     检测出了这个漏洞,但是nacos官方还没有升级文档,所以只能自行下载源码对 Spring-security -config的版本进行调整 如图,对原先的需要进行排除然后在引入漏洞以外的版本,因为是自己修改的,不确定升级版本是否会有未知的隐患,所以对版本是进行了降级的操作,需要修改的POM文件有两......
  • 记整合Nacos踩过的坑
    原始版本 <spring-boot.version>2.3.12.RELEASE</spring-boot.version> <spring-cloud.version>Hoxton.SR12</spring-cloud.version> <spring-cloud-alibaba.version>2.2.8.RELEASE</spring-cloud-alibaba.version>升级后的版本 <sp......
  • 零基础尝试搭建docker和nacos环境
    一、安装docker    参考  https://blog.csdn.net/m0_59196543/article/details/124749175 这篇文章,感谢大佬分享  1、检查是否安装过docker,如果有,则卸载  yumremovedocker\docker-client\docker-client-latest\......
  • Linux安装Jdk,gcc,nginx,redis,nacos
    Linux安装JDK1、下载JDK下载地址:oracle.com/java/technologies/downloads/#java82、将下载好的压缩包放到指定文件夹下3、进入文件夹目录cdsoftware4、创建java目录mkdir/usr/local/java5、解压压缩包到创建好的文件夹tar-zxvfjdk-8u341-linux-x64.tar.gz-C/us......
  • nacos 系列:.net core 6.0 使用 nacos
    目录安装Nuget包配置appsettings.json添加服务和配置测试官方示例:https://kgithub.com/nacos-group/nacos-sdk-csharp安装Nuget包dotnetaddpackagenacos-sdk-csharp.AspNetCoredotnetaddpackagenacos-sdk-csharp.Extensions.Configuration配置appsettings.json......
  • springboot集成seata1.5.2+nacos2.1.1
    一、前言Seata出现前,大部分公司使用的都是TCC或者MQ(RocketMq)等来解决分布式事务的问题,TCC代码编写复杂,每个业务均需要实现三个入口,侵入性强,RocketMQ保证的是最终一致性。二、环境准备1、nacos:(这里采用最新版本2.1.1)下载地址:https://github.com/alibaba/nacos/releases......
  • nacos2.X版本无法注册的几个原因以及解决方案(踩坑避雷!)
    在使用nacos+dubbo注册服务的时候遇到了无法注册的问题记录一下踩的坑以及解决方案com.alibaba.nacos.api.exception.NacosException:Requestnacosserverfailed: atcom.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClie......
  • Nacos源码 (2) 核心模块
    整体架构服务管理:实现服务CRUD,域名CRUD,服务健康状态检查,服务权重管理等功能配置管理:实现配置管CRUD,版本管理,灰度管理,监听管理,推送轨迹,聚合数据等功能元数据管理:提供元数据CURD和打标能力插件机制:实现三个模块可分可合能力,实现扩展点SPI机制事件机制:实现异步化事件通知,sdk......
  • nacos系列:spring cloud使用nacos实现配置管理和服务发现
    目录版本说明创建项目版本说明IDEA:2021.3Maven:3.6.3Jdk:17Spring-Boot:2.6.13Spring-Cloud:2021.0.5Spring-Cloud-Alibaba:2021.0.5.0创建项目1、选择SpringInitalizr2、选择需要安装的版本和依赖3、修改pom文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns......