Nacos分布式配置中心和服务注册中心

分布式配置中心

Nacos Spring Cloud 快速开始

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.11.RELEASE</version>
        <relativePath/> 
    </parent>
    <groupId>com.x</groupId>
    <artifactId>spring-cloud-alibaba-root</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <properties>
        <java.version>1.8</java.version>
        <spring.cloud.version>Hoxton.SR8</spring.cloud.version>
        <spring.cloud.alibaba.version>2.2.5.RELEASE</spring.cloud.alibaba.version>
    </properties>
<modules>
    <module>spring-cloud-nacos</module>
</modules>
    <dependencyManagement>
        <dependencies>
            <!--Spring Cloud的版本管理-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
           <!--Spring Cloud Alibaba的版本管理-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>

    </build>

</project>

1. 引入依赖

     <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
     </dependency>

2.新建bootstrap.properties

在使用Nacos作为配置中心时,推荐在bootstrap.propertiesbootstrap.yml中配置Nacos相关信息,而不是在application.propertiesapplication.yml中,原因主要涉及Spring Boot的启动过程和配置加载顺序:

1.早于主应用加载bootstrap.propertiesbootstrap.yml会在application.propertiesapplication.yml之前被加载。这意味着Nacos客户端的配置信息可以在应用的主配置被处理之前就被初始化,包括获取远程配置的能力。这样,应用在启动时就能使用从Nacos配置中心获取的配置,而非本地静态配置,实现了配置的动态性和灵活性。

2.配置优先级bootstrap配置的优先级高于application配置,这保证了从Nacos加载的配置可以覆盖本地默认配置,满足了外部化配置的需求,即运行时的配置能够覆盖编译时的配置。

3. 配置如下:

spring.application.name = wms-app

spring.cloud.nacos.config.server-addr = 192.168.11.48:8848

#name 就是Nacos里面的dataId,如果不配置就默认使用 spring.application.name
spring.cloud.nacos.config.name = ${spring.application.name}

#如果不配置默认使用的命名空间是 public,如果你配置了就去该命名空间下查找对应表的dataId
spring.cloud.nacos.config.namespace = dev

#如果不配做就使用DEFAULT_GROUP去找对应配置,如果指定就按照指定的去找
#spring.cloud.nacos.config.group =  V2


# 决定这个应用读取的是哪个配置文件: namespace +  group  + dataId 三部分缺一不可

4.通过 Spring Cloud 原生注解@RefreshScope 实现配置自动更新

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${boy.name:潘周聃}")
    private String name;

    @RequestMapping("/get")
    public String get() {
        return this.name;
    }
}

Nacos服务注册中心

1.引入依赖

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

2.application.properties中配置

# 应用名称
spring.application.name=nacos-a

server.port=8080

# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
更多配置:

Nacos discovery · alibaba/spring-cloud-alibaba Wiki · GitHub

3 启动应用

启动springboot应用,nacos管理端界面查看是否成功注册

4 调用其它服务

4.1新建应用nacos-b

@RestController
public class HelloController {

    @GetMapping("hello")
    public String hello(){
        return  "hello world";
    }
}

4.2使用RestTemplate进行服务调用,可以使用微服务名称(spring.application.name)

注意:需要添加@LoadBalanced注解

@Configuration
public class RestConfig {

    @Bean
    @LoadBalanced 
    //注意:如果使用服务注册中心,需要添加@LoadBalanced注解
    //加上该注解之后,RestTemplate会把请求的一级目录最为服务名,去服务注册中心抓取对应的ip,然后再去调用对应的接口数据
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
@SpringBootApplication
public class NacosApplication {

    public static void main(String[] args) {
        
        ApplicationContext ctx = SpringApplication.run(NacosApplication.class, args);

        RestTemplate restTemplate = ctx.getBean(RestTemplate.class);
        String forObject = restTemplate.getForObject("http://nacos-b/hello", String.class);
        System.out.println(forObject);
        
    }

}

5.工作原理

6.触发保护值

要在 Nacos 中配置开启服务实例的保护阈值,你需要在服务消费端(客户端)的 Spring Cloud 配置中添加相应的属性。以下是配置示例,通常是在 application.yml 文件中进行设置:

spring:
  cloud:
    nacos:
      discovery:
        protectThreshold: 0.2

在这个例子中,protectThreshold 设置为 0.2,意味着当服务实例中健康实例的比例低于 20% 时,保护机制将会被触发,Nacos 将返回所有实例(包括健康和不健康)给服务消费者。

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰冰很社恐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值