官网地址:Spring Cloud 阿里巴巴https://spring.io/projects/spring-cloud-alibaba#overview
简介:SpringCloud Alibaba 是一套基于 Spring Cloud 的微服务解决方案,整合了阿里巴巴的开源组件,为开发者提供了更加稳定、高效、全面的微服务架构支持。
核心组件
组件名称 | 功能描述 |
---|---|
Nacos | 服务注册与发现、配置管理 |
Sentinel | 流量控制、熔断降级 |
RocketMQ | 分布式消息中间件 |
Dubbo | RPC 框架,用于服务间调用 |
Seata | 分布式事务解决方案 |
OSS | 对象存储服务,提供海量、安全、低成本、高可靠的云存储服务 |
主要功能
流量控制和服务降级:使用阿里巴巴 Sentinel 进行流量控制、熔断和系统自适应保护
服务注册和发现:实例可以在 Alibaba Nacos 上注册,客户端可以使用 Spring 管理的 bean 发现实例。通过 Spring Cloud Netflix 支持 Ribbon 客户端负载均衡器
分布式配置:使用 Alibaba Nacos 作为数据存储
事件驱动:构建与 Spring Cloud Stream RocketMQ Binder 连接的高扩展性事件驱动微服务
消息总线:使用 Spring Cloud Bus RocketMQ 链接分布式系统的节点
分布式事务:支持 Seata 的高性能和易用性的分布式事务解决方案
Dubbo RPC:通过 Apache Dubbo RPC 扩展 Spring Cloud service-to-service 调用的通信协议
详细Alibaba微服务请移步至官网:Spring Cloud Alibaba官网_基于Springboot的微服务教程-阿里云https://sca.aliyun.com/
Nacos服务注册与配置中心
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
Nacos=注册中心+配置中心,Nacos=Spring Cloud Consul
服务注册操作流程:
========================改pom文件,添加相关依赖=====================================
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--如果是服务消费者,还需要考虑到负载均衡问题-->
<!--loadbalancer-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
========================写yml文件,配置相关信息=====================================
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
#消费者将要去访问的微服务名称(nacos微服务提供者叫什么你写什么),配置服务提供者的相关信息
service-url:
nacos-user-service: http://nacos-payment-provider
======================主启动类,程序入口============================================
@EnableDiscoveryClient
@SpringBootApplication
public class Main83
{
public static void main(String[] args)
{
SpringApplication.run(Main83.class,args);
}
}
========================业务类编写,完成相关测试=====================================
//配置相关的负载均衡策略
@Configuration
public class RestTemplateConfig
{
@Bean
@LoadBalanced //赋予RestTemplate负载均衡的能力
public RestTemplate restTemplate()
{
return new RestTemplate();
}
}
@RestController
public class OrderNacosController
{
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverURL;
@GetMapping("/consumer/pay/nacos/{id}")
public String paymentInfo(@PathVariable("id") Integer id)
{
String result = restTemplate.getForObject(serverURL + "/pay/nacos/" + id, String.class);
return result+"\t"+" 我是OrderNacosController83调用者。。。。。。";
}
}
如何虚拟的生成多个服务的提供者,实现负载均衡的演示
在控制面板的服务栏中找到想要虚拟生成的模板对象,选中后进行右键点击,选择复制配置选项
自己给复制的虚拟服务提供者取一个名字,再点击修改选项,选择添加虚拟机选项,自己给克隆出来的另一个服务提供者分配一个端口号,其它和模板保持一致。最后点击应用,确定即可
配置中心操作流程:
======================改pom,添加相关依赖==========================================
<!--bootstrap-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
=====================写yml文件,两个yml文件========================================
#bootstrap.yml文件先于application.yml文件加载,属于是系统级别的配置文件
# nacos配置
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
# nacos端配置文件DataId的命名规则是:
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# 本案例的DataID是:nacos-config-client-dev.yaml
#application.yml文件用于拉取nacos中存储的配置信息,后于boottrap.yml文件加载,属于是用户级别的配置文件
server:
port: 3377
spring:
profiles:
active: dev # 表示开发环境
#active: prod # 表示生产环境
#active: test # 表示测试环境
==============================主启动类,程序的入口==================================
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClient3377
{
public static void main(String[] args)
{
SpringApplication.run(NacosConfigClient3377.class,args);
}
}
==============================业务类编写,进行相关测试===============================
@RestController
@RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。
public class NacosConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
在Nacos中添加配置信息
DataId理论:
在 Nacos 中,dataId
是用于唯一标识一个配置项的关键概念。当你在 Nacos 中添加配置信息时,理解 dataId
的原理对于有效地管理和检索配置至关重要。
dataId
通常由以下几个部分组成:
前缀:这部分通常是应用的名称或者某个业务模块的名称,用于区分不同的应用或模块。
分隔符:在
dataId
中,通常使用点(.
)作为分隔符来分隔不同的部分。环境标识(可选):用于区分不同环境的配置,如
DEV
(开发环境)、TEST
(测试环境)、PROD
(生产环境)等。扩展名:表示配置文件的格式,如
.properties
、.yaml
、.json
等。
命名规则:
${prefix}-${spring.profiles.active}.${file-extension}
${prefix}
:应用的名称或模块名称。${spring.profiles.active}
:Spring 活动的配置文件,对应环境标识。${file-extension}
:配置文件的扩展名。
Namespace+Group+DataId三元组
在分布式系统或微服务架构中,配置管理是一个至关重要的部分。为了确保不同服务或组件能够正确获取和使用配置,通常会采用一种称为“Namespace + Group + DataId”的三元组机制来唯一标识和管理配置项。
1. Namespace
Namespace(命名空间) 用于隔离不同环境或不同项目的配置。例如,在一个大型企业中,可能会有多个独立的项目或产品线,每个项目或产品线都需要自己的配置。通过为不同的项目或产品线分配不同的Namespace,可以确保它们的配置不会相互干扰。
作用:隔离配置,防止不同项目或环境的配置冲突。
示例:
dev
(开发环境)、prod
(生产环境)、projectA
(项目A)。
2. Group
Group(分组) 用于将相关的配置项组织在一起。在一个项目中,可能会有多种类型的配置,如数据库配置、缓存配置、消息队列配置等。通过将这些配置按照功能或用途分组,可以更方便地管理和维护。
作用:组织和管理相关的配置项。
示例:
database
(数据库配置)、cache
(缓存配置)、mq
(消息队列配置)。
3. DataId
DataId(数据ID) 是配置项的唯一标识。每个具体的配置项都需要一个DataId来区分。例如,数据库连接的URL、用户名和密码就可以分别使用不同的DataId来标识。
作用:唯一标识配置项。
示例:
db.url
、db.username
、db.password
。
示例
假设我们有一个名为projectA
的项目,它需要在生产环境中配置数据库连接信息。那么,我们可以使用以下的三元组来唯一标识这个配置项:
Namespace:
prod
Group:
database
DataId:
db.url
这样,通过这个三元组,系统就能够准确地找到并加载相应的配置信息。
总结
Namespace:用于隔离不同环境或项目的配置。
Group:用于组织和管理相关的配置项。
DataId:用于唯一标识配置项。
通过这种三元组机制,可以有效地管理和维护分布式系统或微服务架构中的配置项,确保不同服务或组件能够正确获取和使用配置。