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


相关文章
|
4天前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
80 12
Spring Cloud Alibaba:一站式微服务解决方案
|
1天前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
|
11天前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
26 6
|
20天前
|
存储 Java Nacos
Spring Cloud+Nacos+KMS 动态配置最佳实践
本文讲述了 Spring Cloud 应用中结合 Nacos 实现了运行期配置动态更新的功能,以及在此基础上结合 KMS 在不改动代码的情况下对应用使用的敏感配置进行保护,解决将配置迁移到 Nacos 中可能存在的数据安全顾虑,并对其底层工作原理做了简单介绍。
281 12
|
11天前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
30 5
|
11天前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
23 5
|
23天前
|
存储 人工智能 Java
Spring AI Alibaba 配置管理,用 Nacos 就够了
本文通过一些实操案例展示了 Spring AI Alibaba + Nacos 在解决 AI 应用中一系列复杂配置管理挑战的方案,从动态 Prompt 模板的灵活调整、模型参数的即时优化,到敏感信息的安全加密存储。Spring AI Alibaba 简化了对接阿里云通义大模型的流程,内置 Nacos 集成也为开发者提供了无缝衔接云端配置托管的捷径,整体上极大提升了 AI 应用开发的灵活性和响应速度。
157 13
|
1月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
2月前
|
人工智能 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 应用的便利性。示例源
1079 9
|
2月前
|
人工智能 开发框架 Java
总计 30 万奖金,Spring AI Alibaba 应用框架挑战赛开赛
Spring AI Alibaba 应用框架挑战赛邀请广大开发者参与开源项目的共建,助力项目快速发展,掌握 AI 应用开发模式。大赛分为《支持 Spring AI Alibaba 应用可视化调试与追踪本地工具》和《基于 Flow 的 AI 编排机制设计与实现》两个赛道,总计 30 万奖金。