• springcloud学习笔记(3)-服务管理组件Nacos


    Nacos简介

    在2中学习了服务治理中心eureka,而本节的nacos来自springcloud alibaba。

    Nacos也是一个服务注册和管理的组件。

    Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理

    官方文档

    快速开始 | Spring Cloud Alibaba (aliyun.com)

    概述 | Spring Cloud Alibaba (aliyun.com)

    Nacos Spring Cloud 快速开始

    安装启动

    Nacos 快速开始

    访问:http://127.0.0.1:8848/nacos/ 

     示例

    可以使用官方示例

    spring-cloud-alibaba/spring-cloud-alibaba-examples/nacos-example/nacos-config-example at 2022.x · alibaba/spring-cloud-alibaba · GitHub

     参考官方教程:快速开始 | Spring Cloud Alibaba (aliyun.com)

    Nacos 来实现分布式环境下的配置管理和服务注册发现。

    配置管理

    (这节讲的是如何通过应用实现对nacos的配置进行管理)

    • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更,这里的配置,是指nacos本身的配置,可以对nacos添加配置,更新配置。
    • Nacos Spring Cloud 快速开始

    如果要在您的项目中使用 Nacos 来实现配置管理,需要进行以下操作(确保 Nacos Server 已启动):

    1. 需要在 pom.xml 文件中引入 group ID 为 com.alibaba.cloud 和 artifact ID 为 spring-cloud-starter-alibaba-nacos-config 的 starter:

      1. <dependency>
      2. <groupId>com.alibaba.cloud</groupId>
      3. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      4. </dependency>

    2. 在应用的 /src/main/resources/application.yaml 配置文件中配置 Nacos Config 地址并引入服务配置:

      1. spring:
      2. cloud:
      3. nacos:
      4. serverAddr: 127.0.0.1:8848
      5. config:
      6. import:
      7. - nacos:nacos-config-example.properties?refresh=true
    3. 完成上述两步后,应用会从 Nacos Server 中获取相应的配置,并添加在 Spring Environment 的 PropertySources 中。假设我们通过 Nacos 作为配置中心保存应用服务的部分配置,有以下几种方式实现:

      • BeanAutoRefreshConfigExample:通过将配置信息配置为bean,支持配置变自动刷新;
      • ConfigListenerExample:监听配置信息;
      • DockingInterfaceExample:对接 Nacos 接口,通过接口完成对配置信息增删改查
      • ValueAnnotationExample:通过 @Value 注解进行配置信息获取。示例代码给出了这几种方式

    调用 Nacos Open API 向 Nacos Server 发布配置

    1. 命令行方式:

      $ curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos-config-example.properties&group=DEFAULT_GROUP&content=spring.cloud.nacos.config.serverAddr=127.0.0.1:8848%0Aspring.cloud.nacos.config.prefix=PREFIX%0Aspring.cloud.nacos.config.group=GROUP%0Aspring.cloud.nacos.config.namespace=NAMESPACE"
      

    2. 控制台方式(推荐使用):

      1. dataId为:nacos-config-example.properties
      2. group为:DEFAULT_GROUP

      配置内容如下:

      1. spring.cloud.nacos.config.serveraddr=127.0.0.1:8848
      2. spring.cloud.nacos.config.prefix=PREFIX
      3. spring.cloud.nacos.config.group=GROUP
      4. spring.cloud.nacos.config.namespace=NAMESPACE

     

    添加后的配置 

    报错不支持java 17,需要在project structure将SDK设置为JDK17,运行解决。

    请求 http://127.0.0.1:18084/nacos/bean 地址,可以看到成功从 Nacos 配置中心中获取了数据。

    $ curl http://127.0.0.1:18084/nacos/bean
    

    响应结果:

    1. {
    2. "serverAddr": "127.0.0.1:8848",
    3. "prefix": "PREFIX",
    4. "namespace": "NAMESPACE",
    5. "group":"GROUP"
    6. }

    这里返回的是BeanAutoRefreshConfigExample读取到的nacos的配置。

    在命令行终端执行以下命令刷新 Nacos 的配置信息:

    $ curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos-config-example.properties&group=DEFAULT_GROUP&content=spring.cloud.nacos.config.serveraddr=127.0.0.1:8848%0Aspring.cloud.nacos.config.prefix=PREFIX%0Aspring.cloud.nacos.config.group=DEFAULT_GROUP%0Aspring.cloud.nacos.config.namespace=NAMESPACE"
    

    (修改nacos的配置)

    再次请求 http://127.0.0.1:18084/nacos/bean 地址,可以看到应用已经从 Nacos 中获取到了最新的数据。

    $ curl http://127.0.0.1:18084/nacos/bean
    

    响应结果:

    1. {
    2. "serverAddr": "127.0.0.1:8848",
    3. "prefix": "PREFIX",
    4. "namespace": "NAMESPACE",
    5. "group": "DEFAULT_GROUP"
    6. }

    服务注册与发现

    服务注册,是指服务被注册到nacos中,nacos可以对服务进行管理。

    服务发现,是指当一个服务consumer,请求另一个服务provider时,由nacos发现 provider,consumer才去获取provider提供的服务。如果没有nacos,consumer找不到provider。

    服务注册

     

    将服务注册到Nacos中

    微服务的节点都需要注册到服务注册中心

    1)加依赖

    需要在 pom.xml 文件中引入 group ID 为 com.alibaba.cloud 和 artifact ID 为 spring-cloud-starter-alibaba-nacos-discovery 的 starter:

    1. <dependency>
    2. <groupId>com.alibaba.cloud</groupId>
    3. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    4. </dependency>

    2)加配置

    添加应用配置:在应用的 /src/main/resources/application.properties 配置文件中配置 Nacos Server 地址:

    1. spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    2. spring.application.name=service-provider #​​​​​​​这里的name配置了服务的名称。
    3. server.port=18082

    3)加注解 

    1. 使用 @EnableDiscoveryClient 注解开启服务注册与发现功能:

      1. @SpringBootApplication
      2. @EnableDiscoveryClient
      3. public class ProviderApplication {
      4. public static void main(String[] args) {
      5. SpringApplication.run(ProviderApplication.class, args);
      6. }
      7. @RestController
      8. class EchoController {
      9. @GetMapping(value = "/echo/{string}")
      10. public String echo(@PathVariable String string) {
      11. return string;
      12. }
      13. }
      14. }

    启动应用并验证

    1. 启动provider应用,

      IDE直接启动:找到 nacos-discovery-provider-example 项目的主类 ProviderApplication,执行 main 方法启动应用。
    2. 报错 提示找不到或无法加载主类 com.alibaba.cloud.examples.ProviderApplication​​​​​​​

    rebuild,清除IDEA缓存都没解决 

    单独打开这个服务运行就可以了

     发现服务已被注册到Nacos

    服务发现

    这一节涉及到了另外的组件feign,需要前置知识。

    启动nacos-discovery-consumer-example

    访问127.0.0.1:18083/echo-rest/1234 返回的是provider的/echo/string方法的结果,说明消费者请求到了提供者提供的服务。

    请求 http://127.0.0.1:18083/echo-feign/12345 地址,可以看到响应显示了 nacos-discovery-provider-example 返回的消息 "hello Nacos Discovery 12345",证明服务发现生效。 

     

  • 相关阅读:
    WMware Tools安装失败segmentation fault解决方法
    .NET性能优化-你应该为集合类型设置初始大小
    PLC学习笔记(一):概述
    紫杉醇联合2-甲氧基雌二醇的白蛋白纳米粒/荜茇酰胺白蛋白纳米粒的研究制备
    计算机类编程课学生编写的代码应该如何管理
    [HNOI2016] 网络
    Leetcode刷题详解——四数之和
    Linux内核设计与实现 第四章 系统调用
    J2EE从入门到入土02.List集合解析
    软件项目管理案例教程-韩万江-期末复习
  • 原文地址:https://blog.csdn.net/seanyang_/article/details/133764457