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 等环境


相关文章
|
15天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
1月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
125 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
22天前
|
消息中间件 自然语言处理 Java
知识科普:Spring Cloud Alibaba基本介绍
知识科普:Spring Cloud Alibaba基本介绍
55 2
|
29天前
|
人工智能 开发框架 Java
总计 30 万奖金,Spring AI Alibaba 应用框架挑战赛开赛
Spring AI Alibaba 应用框架挑战赛邀请广大开发者参与开源项目的共建,助力项目快速发展,掌握 AI 应用开发模式。大赛分为《支持 Spring AI Alibaba 应用可视化调试与追踪本地工具》和《基于 Flow 的 AI 编排机制设计与实现》两个赛道,总计 30 万奖金。
|
30天前
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
近期,阿里云重磅发布了首款面向 Java 开发者的开源 AI 应用开发框架:Spring AI Alibaba(项目 Github 仓库地址:alibaba/spring-ai-alibaba),Spring AI Alibaba 项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。本文将详细介绍 Spring AI Alibaba 的核心特性,并通过「智能机票助手」的示例直观的展示 Spring AI Alibaba 开发 AI 应用的便利性。示例源
|
1月前
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
阿里云开源 Spring AI Alibaba,旨在帮助 Java 开发者快速构建 AI 应用,共同构建物理新世界。
|
30天前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
2月前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
2103 18
|
2月前
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
2月前
|
人工智能 前端开发 Java
Spring Cloud Alibaba AI,阿里AI这不得玩一下
🏀闪亮主角: 大家好,我是JavaDog程序狗。今天分享Spring Cloud Alibaba AI,基于Spring AI并提供阿里云通义大模型的Java AI应用。本狗用SpringBoot+uniapp+uview2对接Spring Cloud Alibaba AI,带你打造聊天小AI。 📘故事背景: 🎁获取源码: 关注公众号“JavaDog程序狗”,发送“alibaba-ai”即可获取源码。 🎯主要目标:
83 0