SpringCloud -Nacos

发布于:2025-02-14 ⋅ 阅读:(114) ⋅ 点赞:(0)

官网地址: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 官网https://nacos.io/?spm=5176.29160081.0.0.74805c72OflXwF

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.urldb.usernamedb.password

示例

假设我们有一个名为projectA的项目,它需要在生产环境中配置数据库连接信息。那么,我们可以使用以下的三元组来唯一标识这个配置项:

  • Namespace: prod

  • Group: database

  • DataId: db.url

这样,通过这个三元组,系统就能够准确地找到并加载相应的配置信息。

总结

  • Namespace:用于隔离不同环境或项目的配置。

  • Group:用于组织和管理相关的配置项。

  • DataId:用于唯一标识配置项。

通过这种三元组机制,可以有效地管理和维护分布式系统或微服务架构中的配置项,确保不同服务或组件能够正确获取和使用配置。


网站公告

今日签到

点亮在社区的每一天
去签到