Spring Cloud Alibaba之nacos

简介: Spring Cloud Alibaba之nacos

SpringCloud Alibaba 简介

简介

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用 微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布 式应用服务。


依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用 接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。


源码地址  

https://github.com/alibaba/spring-cloud-alibaba


为什么使用


751fbb71fe2649278159879c6f19348e.png

9fdfda8587164552bae6fd1e9d8d9f55.png

SpringCloud的几大痛点

SpringCloud部分组件停止维护和更新,给开发带来不便;

SpringCloud部分环境搭建复杂,没有完善的可视化界面,我们需要大量的二次开发和定制

SpringCloud配置复杂,难以上手,部分配置差别难以区分和合理应用

SpringCloud Alibaba的优势

阿里使用过的组件经历了考验,性能强悍,设计合理,现在开源出来大家用成套的产品搭配完善的可视化界面给开发运维带来极大的便利

搭建简单,学习曲线低。

SpringCloud Alibaba - Nacos:注册中心(服务发现/注册)


SpringCloud Alibaba - Nacos:配置中心(动态配置管理)


SpringCloud - Ribbon:负载均衡


SpringCloud - Feign:声明式HTTP客户端(调用远程服务)


SpringCloud Alibaba - Sentinel:服务容错(限流、降级、熔断)


SpringCloud - Gateway:API网关(webflux编程模式)


SpringCloud - Sleuth:调用链监控


SpringCloud Alibaba - Seata:原Fescar,即分布式事务解决方案


版本选择


由于Spring Boot 1和Spring Boot 2在Actuator模块的接口和注解有很大的变更,且spring-cloud-commons从1.x.x版本升级到2.0.0版本也有较大的变更,因此我们采取跟SpringBoot版本号一致的版本:


1.5.x版本适用于Spring Boot 1.5.x

2.0.x版本适用于Spring Boot 2.0.x

2.1.x版本适用于Spring Boot 2.1.x

SpringCloud Alibaba-Nacos[作为注册中心]


Nacos是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。他是使用java编写。需要依赖java环境

Nacos文档地址:

https://nacos.io/zh-cn/docs/quick-start.html

下载nacos-server

https://github.com/alibaba/nacos/releases

启动nacos-server

双击bin中的startup.cmd文件

访问http://localhost:8848/nacos/

使用默认的nacos/nacos进行登录

278340e1ad1647ddb6fda9c1cdb4692b.png


将微服务注册到nacos中

1、首先,修改pom.xml文件,引入Nacos Discovery Starter。

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

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

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848


3、使用@EnableDiscoveryClient开启服务注册发现功能


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

4、启动应用,观察 nacos 服务列表是否已经注册上服务

注意:每一个应用都应该有名字,这样才能注册上去。修改 application.properties 文件
spring.application.name=service-provider
server.port=8000

5、注册更多的服务上去,测试使用 feign 远程调用


Nacos 使用三步


1、导包 nacos-discovery


2、写配置,指定 nacos 地址,指定应用的名字


3、开启服务注册发现功能@EnableDiscoveryClient


Feign 使用三步


1、导包 openfeign


2、开启@EnableFeignClients 功能


3、编写接口,进行远程调用

@FeignClient("stores")
public interface StoreClient {
    @RequestMapping(method = RequestMethod.GET, value = "/stores")
    List<Store> getStores();
    @RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes =                 "application/json")
    Store update(@PathVariable("storeId") Long storeId, Store store);
}

6、更多配置

https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nac


SpringCloud Alibaba-Nacos[作为配置中心]

1、pom.xml 引入 Nacos Config Starter。


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

2、在应用的 /src/main/resources/bootstrap.properties 配 置文件中配置 Nacos Config 元数据

spring.application.name=nacos-config-example
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

主要配置应用名和配置中心地址


3、在 nacos 中添加配置


在 nacos 中创建一个 应用名.properties 配置文件并编写配置


Nacos Config 数据结构


Nacos Config 主要通过 dataId 和 group 来唯一确定一条配置。


Nacos Client 从 Nacos Server 端获取数据时,调用的是此接口 ConfigService.getConfig(StringdataId, String group, long timeoutMs)。


Spring Cloud 应用获取数据


dataID:


在 Nacos Config Starter 中,dataId 的拼接格式如下


 ${prefix} - ${spring.profiles.active} . ${file-extension} prefix 默认为 spring.application.name的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置。


 spring.profiles.active 即为当前环境对应的 profile


注意,当 activeprofile 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成


${prefix}.${file-extension}


file-extension 为配置内容的数据格式,可以通过配置项


spring.cloud.nacos.config.file-extension 来配置。 目前只支持 properties 类型。


Group:


Group 默认为 DEFAULT_GROUP,可以通过 spring.cloud.nacos.config.group 配置。


 在应用中使用@Value 和@RefreshScope


完成上述两步后,应用会从 Nacos Config 中获取相应的配置,并添加在 Spring Environment


的 PropertySources 中 。 这 里 我 们 使 用 @Value 注 解 来 将 对 应 的 配 置 注 入 到


SampleController 的 userName 和 age 字段,并添加 @RefreshScope 打开动态刷新功能

@RefreshScope
class SampleController {
    @Value("${user.name}")
    String userName;
    @Value("${user.age}")
    int age;
}

进阶

核心概念

命名空间:


       用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的 配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生 产环境的资源(如配置、服务)隔离等。


配置集:


       一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配 置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。


配置集 ID:


       Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组 织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有 意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名 规则保证全局唯一性。此命名规则非强制。


配置分组:


       Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个 配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置 分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和MQ_topic 配置


原理

自动注入:


       NacosConfigStarter 实现了         org.springframework.cloud.bootstrap.config.PropertySourceLocator接口,并将优先级设置成了最高。


在 Spring Cloud 应用启动阶段,会主动从 Nacos Server 端获取对应的数据,并将获取到的 数据转换成 PropertySource 且注入到 Environment 的 PropertySources 属性中,所以使用@Value 注解也能直接获取 Nacos Server 端配置的内容。


动态刷新:


       Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听         到服务端配置发生变化时会实时触发org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 方法 。


如果需要对 Bean 进行动态刷新,请参照 Spring 和 Spring Cloud 规范。推荐给类添加@RefreshScope 或 @ConfigurationProperties 注解,


加载多配置文件

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=31098de9-fa28-41c9-b0bd-c754ce319ed4
spring.cloud.nacos.config.ext-config[0].data-id=gulimall-datasource.yml
spring.cloud.nacos.config.ext-config[0].refresh=false
spring.cloud.nacos.config.ext-config[0].group=dev

namespace 与 group 最佳实践

每个微服务创建自己的 namespace 进行隔离,group 来区分 dev,beta,prod 等环境


相关文章
|
14天前
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
236 14
|
13天前
|
存储 人工智能 开发框架
Spring AI Alibaba 应用框架挑战赛圆满落幕,恭喜获奖选手
第二届开放原子大赛 Spring AI Alibaba 应用框架挑战赛决赛于 2 月 23 日在北京圆满落幕。
|
19天前
|
人工智能 Cloud Native 安全
DeepSeek + Higress AI 网关/Spring AI Alibaba 案例征集
诚挚地感谢每一位持续关注并使用 Higress 和 Spring AI Alibaba 的朋友,DeepSeek + Higress AI 网关/Spring AI Alibaba 案例征集中。
|
13天前
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
122 1
|
20天前
|
人工智能 Java API
支持 40+ 插件,Spring AI Alibaba 简化智能体私有数据集成
通过使用社区官方提供的超过 20 种 RAG 数据源和 20 种 Tool Calling 接口,开发者可以轻松接入多种外部数据源(如 GitHub、飞书、云 OSS 等)以及调用各种工具(如天气预报、地图导航、翻译服务等)。这些默认实现大大简化了智能体的开发过程,使得开发者无需从零开始,便可以快速构建功能强大的智能体系统。通过这种方式,智能体不仅能够高效处理复杂任务,还能适应各种应用场景,提供更加智能、精准的服务。
|
2月前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
216 4
|
3月前
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
【SpringCloud Alibaba系列】Dubbo高级特性篇
|
3月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
3月前
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
2月前
|
人工智能 Java API
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
本次分享的主题是阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手,由阿里云两位工程师分享。
104 0
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手

热门文章

最新文章