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


相关文章
|
5天前
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
【SpringCloud Alibaba系列】Dubbo高级特性篇
|
5天前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
5天前
|
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安装教程篇
|
5天前
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
20天前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
178 13
Spring Cloud Alibaba:一站式微服务解决方案
|
5天前
|
人工智能 前端开发 Java
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
140 0
|
1月前
|
存储 Java Nacos
Spring Cloud+Nacos+KMS 动态配置最佳实践
本文讲述了 Spring Cloud 应用中结合 Nacos 实现了运行期配置动态更新的功能,以及在此基础上结合 KMS 在不改动代码的情况下对应用使用的敏感配置进行保护,解决将配置迁移到 Nacos 中可能存在的数据安全顾虑,并对其底层工作原理做了简单介绍。
469 13
|
1月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
221 12
基于开源框架Spring AI Alibaba快速构建Java应用
|
28天前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
32 6
|
28天前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
47 5