SpringCloud Alibaba Nacos服务注册与配置中心

本文详细介绍了Nacos作为服务注册与配置中心的使用,包括服务提供者和消费者的注册、Nacos的负载均衡特性,以及如何通过Nacos实现服务配置的动态更新。此外,还探讨了Nacos的命名空间、分组和DataID的概念,并展示了如何在不同环境间切换配置。Nacos的优势在于其支持CP和AP模式,以及便捷的配置管理功能。
摘要由CSDN通过智能技术生成

Nacos服务注册与配置中心

1.什么是Nacos?

Nacos(Dynamic Naming and Configuration Service)Nacos就是注册中心+配置中心的组合。即Nacos = Eureka + config + Bus。他能替代Eureka做服务注册中心,替代Config做服务配置中心。

2.Nacos安装运行

上他的官网Release 1.1.4(Oct 24th, 2019) · alibaba/nacos (github.com)下载一个压缩包解压之后找到bin目录下找到startup.cmd打开能看到这个说明安装成功了。

在这里插入图片描述

然后访问他的web界面输入http://localhost:8848/nacos能看到这个登录界面说明访问成功了。

在这里插入图片描述

默认用户名密码都是nacos登录进去

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CKIGBB5e-1645366625852)(C:\Users\MICROSOFT\Pictures\博客图片\SpringCloud\Nacos\nacos主界面.png)]

来到这个界面这个就很贴心了配置管理,服务管理,集群管理都给你安排明白了。另外插句题外话,这个端口号设置的很灵性是大名鼎鼎的8848向成功的人生致敬!!!!!!

3.Nacos简单案例之注册中心

3.1Nacos服务提供者

为了防止每次新建一个Nacos相关的项目就得引入一个Nacos依赖所以我们可以直接在父pom中引入Nacos的相关依赖。后面子工程就不用引入了。

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

然后新建一个子moudle在pom文件中其中引入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: '*'

配置文件规定好端口号,服务名称,注册到localhost:8848这个注册中心里,然后management将端口暴露出来供以后监控。

然后主启动类上加上@EnableDiscoveryClient注解,业务类controller非常简单写一个接口返回端口号供测试使用。

@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 + "\t id" + id;
    }
}

启动9001这个服务看看能不能把他注册进nacos里。

在这里插入图片描述

刷新一下点击服务列表能看到我们的服务,说明服务已经成功的注册进服务中心。

3.2Nacos服务消费者

建立一个服务消费者module然后pom文件和之前的一样。然后新建yml文件

server:
  port: 83


spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848


service-url:
  nacos-user-service: http://nacos-payment-provider

主启动类和上面一样需要加上@EnableDiscovery注解。然后业务类controller需要调用服务提供者的接口

@RestController
public class OrderNacosController {
    @Autowired
    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);
    }
}

输入url:localhost:83/consumer/payment/nacos/7然后可以看到成功访问到服务提供者的接口

在这里插入图片描述

3.3Nacos自带的负载均衡

在这里插入图片描述

可以看出nacos依赖里面就包含了ribbon,所以nacos默认支持负载均衡。

为了验证nacos的负载均衡我们可以在新建一个9002服务提供者和9001一样。然后在消费者这边创建配置类,实现负载均衡的配置。

在这里插入图片描述

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

然后启动9001,9002,83通过消费者访问服务提供者的接口

在这里插入图片描述

这次就变成了9002你再点一下就变成了9001来回交替轮询。

3.4Nacos服务注册中心的优点

Nacos服务注册中心既支持CP也支持AP,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如SpringCloud和Dubbo服务都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。

如果需要在服务级别编辑或者存储配置信息,那么CP是必须的,K8s服务DNS服务则适用于CP模式。CP模式下则是支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。

Nacos几乎做到了各种技术栈的全景覆盖。

4.Nacos简单案例之配置中心

首先新建一个module然后在pom文件中引入他的配置中心的依赖。

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

Nacos配置中心相比于Config+Bus来说不知道好了多少,他可以直接在Nacos界面上配置。

在这里插入图片描述

这个Data ID他的官网上是这样描述的

在这里插入图片描述

也就是说你得在你的moudle下添加几个配置文件,补充这几个配置项。因此我们在此module下要新建这两个配置文件bootstrap.yml,application.yml。

bootstrap.yml

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置

application.yml

spring:
  profiles:
    active: dev

从上面的配置文件可以看出bootstrap.yml中的spring.application.name就是Data ID中的prefix,application.yml的spring.profiles.active就是spring.profiles.active,bootstrap.yml中的file-extension就是Data ID中的file-extension。所以我们的这个Data ID应该是nacos-config-client-dev.yaml

然后我们新建一个配置填上Data ID,配置格式选择YAML然后config注意格式。

在这里插入图片描述

点发布就能看到配置列表里新增了一个配置

在这里插入图片描述

一定要注意那个Data ID,dev之前一定是“-”不是“.",还有一定是yaml。

为了方便测试我们需要在module下面加入一个主启动类,一个controller。

@SpringBootApplication
@EnableDiscoveryClient//让注册中心发现并扫描该服务
public class NacosConfigClientMain3377 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class,args);
    }
}
@RestController
@RefreshScope//保证Nacos动态刷新
public class ConfigClientController {
    @Value("${config.info}")
    private String configInfo;
    @GetMapping("/config/info")
    public String getConfigInfo(){
        return configInfo;
    }
}

然后打开3377这个服务,在url浏览器端访问3377。

在这里插入图片描述

nacos配置中心最牛逼的一点就是不用再像Config或Bus那样,还得手动通知这个通知那个的,只要你在controller类上加了@RefreshScope就能自动刷新,比如我现在把version改成2。我在访问这个接口能观察到马上就改了,非常痛快。

在这里插入图片描述

5.Nacos命名空间,分组,Data ID

在这里插入图片描述

Nacos默认的命名空间是public,Namespace主要用来实现隔离。比如说我们现在有三个环境:开发,测试,生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。

Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去。

Service就是微服务,一个Service可以包含多个Cluster集群,Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分,比方说为了容灾,将Service微服务分别部署在了不同地方的机房那么同一个地方的微服务可以互相调用可以提升性能。

5.1 Data ID配置

之前的Data ID是nacos-config-client-dev.yaml,这个dev就是application.yml里面的spring.profile.active如果我们把这个改成test环境然后再新增一个Data ID为test的配置即可切换环境为测试环境。

在这里插入图片描述

然后测试一下

在这里插入图片描述

5.2Group分组方案

要修改设置group我们需要在bootstrap.yml文件中添加group属性,然后在Nacos中配置group属性,Nacos的group和yml文件中的group要一致。你如果不指定group属性那就是一开始默认的DEFAULT_GROUP。

在这里插入图片描述

在这里插入图片描述

然后我们访问一下接口看看好不好使

在这里插入图片描述

结果是好使。

5.3Nacos命名空间NameSpace方案

在这里插入图片描述

可以看出这个命名空间里面有三个一个是默认的public你只能查看详情不能删除和编辑,后面两个是我自己建的一个是开发环境的(dev),一个是测试环境(test),对应的都有命名空间ID。

然后我们挑dev命名空间演示一下NameSpace,Group,Data ID三级配置。切换到该命名空间之下,创建两个分组一个用默认DEFAULT_GROUP,WJZ_GROUP。分别对他们进行配置。

在这里插入图片描述

然候修改bootstrap.yml文件

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: WJZ_GROUP #如果不是默认就有不然就没有
        namespace: fbb37b9d-1a14-42e7-8f33-549c191ef9c2

访问这个命名空间下的,WJZ_GROUP组的,nacos-config-client-dev.yaml

在这里插入图片描述

现在我把yaml文件中group这个去掉然后再次访问

在这里插入图片描述

得到的就是DEFAULT_GROUP的这组的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

温JZ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值