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


相关文章
|
2天前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
|
1天前
|
负载均衡 Java 应用服务中间件
Spring Cloud 负载平衡的意义什么?
负载平衡是指将网络流量在多个服务器之间分布,以达到提高系统性能、增强可靠性和提供更好用户体验的目的。在负载平衡的架构中,多个服务器被组织成一个集群,共同处理用户的请求。
24 4
|
2天前
|
监控 安全 Java
Spring cloud原理详解
Spring cloud原理详解
18 0
|
2天前
|
消息中间件 负载均衡 Java
【Spring Cloud 初探幽】
【Spring Cloud 初探幽】
16 1
|
2天前
|
安全 Java Docker
|
2天前
|
Java 开发者 微服务
Spring Cloud原理详解
【5月更文挑战第4天】Spring Cloud是Spring生态系统中的微服务框架,包含配置管理、服务发现、断路器、API网关等工具,简化分布式系统开发。核心组件如Eureka(服务发现)、Config Server(配置中心)、Ribbon(负载均衡)、Hystrix(断路器)、Zuul(API网关)等。本文讨论了Spring Cloud的基本概念、核心组件、常见问题及解决策略,并提供代码示例,帮助开发者更好地理解和实践微服务架构。此外,还涵盖了服务通信方式、安全性、性能优化、自动化部署、服务网格和无服务器架构的融合等话题,揭示了微服务架构的未来趋势。
35 6
|
2天前
|
JSON Java Apache
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
|
2天前
|
负载均衡 Java 开发者
Spring Cloud:一文读懂其原理与架构
Spring Cloud 是一套微服务解决方案,它整合了Netflix公司的多个开源框架,简化了分布式系统开发。Spring Cloud 提供了服务注册与发现、配置中心、消息总线、负载均衡、熔断机制等工具,让开发者可以快速地构建一些常见的微服务架构。
|
2天前
|
消息中间件 Java RocketMQ
Spring Cloud RocketMQ:构建可靠消息驱动的微服务架构
【4月更文挑战第28天】消息队列在微服务架构中扮演着至关重要的角色,能够实现服务之间的解耦、异步通信以及数据分发。Spring Cloud RocketMQ作为Apache RocketMQ的Spring Cloud集成,为微服务架构提供了可靠的消息传输机制。
30 1
|
2天前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo: 微服务通信的高效解决方案
【4月更文挑战第28天】在微服务架构的发展中,服务间的高效通信至关重要。Spring Cloud Dubbo 提供了一种基于 RPC 的通信方式,使得服务间的调用就像本地方法调用一样简单。本篇博客将探讨 Spring Cloud Dubbo 的核心概念,并通过具体实例展示其在项目中的实战应用。
20 2

热门文章

最新文章