当前位置: 首页 > article >正文

14天学习微服务-->第2天:Spring Cloud深入与实践

第2天:Spring Cloud深入与实践

一、Spring Cloud核心组件深入

在微服务架构中,Spring Cloud 提供了一系列核心组件来支持服务的注册与发现、配置管理、负载均衡等功能。今天我们将深入学习其中的三个关键组件:Eureka/Nacos(服务注册与发现)Spring Cloud Config(配置中心)Ribbon(负载均衡)

二、Eureka/Nacos:服务注册与发现

服务注册与发现是微服务架构的核心功能之一。通过注册中心,服务提供者可以注册自己的服务信息,服务消费者可以从注册中心获取服务列表并动态调用服务。

Eureka vs. Nacos

特性EurekaNacos
功能服务注册与发现服务注册与发现、配置管理、服务限流
社区活跃度较高,但 Netflix 已停止更新阿里开源,社区活跃
性能性能稳定,适合中小规模应用性能更强,适合大规模应用
集成难度集成简单,与 Spring Cloud 原生支持需额外适配,但功能更强大

实践:使用 Eureka/Nacos 实现服务注册与发现

  1. 搭建注册中心(以 Nacos 为例)

    • 下载 Nacos:Nacos 官网

    • 启动 Nacos:解压后运行 startup.shstartup.cmd

  2. 服务提供者注册到 Nacos

    // 添加依赖
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
    // 启动类
    @SpringBootApplication
    @EnableDiscoveryClient
    public class ServiceProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(ServiceProviderApplication.class, args);
        }
    }
    
    // application.yml
    server:
      port: 8001
    spring:
      application:
        name: service-provider
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848  # Nacos 服务地址
  3. 服务消费者从 Nacos 获取服务

    // 添加依赖
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
    // 启动类
    @SpringBootApplication
    @EnableDiscoveryClient
    public class ServiceConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ServiceConsumerApplication.class, args);
        }
    }
    
    // RestTemplate 配置
    @Configuration
    public class RestTemplateConfig {
        @Bean
        @LoadBalanced  // 开启负载均衡
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    }
    
    // 控制器
    @RestController
    public class ConsumerController {
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping("/callService")
        public String callService() {
            return restTemplate.getForObject("http://service-provider/hello", String.class);
        }
    }
三、Spring Cloud Config:配置中心

配置中心用于集中管理微服务的配置信息,支持动态刷新配置,避免每次修改配置后重启服务。

实践:搭建 Spring Cloud Config 服务

  1. 创建 Config Server

    // 添加依赖
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    
    // 启动类
    @SpringBootApplication
    @EnableConfigServer
    public class ConfigServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConfigServerApplication.class, args);
        }
    }
    
    // application.yml
    server:
      port: 8888
    spring:
      application:
        name: config-server
      cloud:
        config:
          server:
            git:
              uri: https://github.com/your-repo/config-repo  # 配置文件存储在 Git 仓库
  2. 服务使用配置中心

    // 添加依赖
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    
    // bootstrap.yml
    spring:
      application:
        name: service-provider
      cloud:
        config:
          uri: http://localhost:8888  # Config Server 地址
  3. 配置文件存储在 Git

    • 在 Git 仓库中创建 service-provider.yml 文件:

      server:
        port: 8001
四、Ribbon:负载均衡解决方案

Ribbon 是 Spring Cloud 的负载均衡组件,与 RestTemplate 或 Feign 集成,实现客户端负载均衡。

实践:使用 Ribbon 实现负载均衡

  1. 添加依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>
  2. 配置负载均衡

    // RestTemplate 配置
    @Configuration
    public class RestTemplateConfig {
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    }
    
    // 控制器
    @RestController
    public class ConsumerController {
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping("/callService")
        public String callService() {
            return restTemplate.getForObject("http://service-provider/hello", String.class);
        }
    }
  3. 启动多个服务提供者实例

    • 修改 application.yml,启动多个实例:

      server:
        port: 8001
      spring:
        application:
          name: service-provider
五、总结

通过今天的深入学习,我们掌握了 Spring Cloud 中三个核心组件的使用和配置:

  1. Eureka/Nacos:作为服务注册与发现中心,帮助服务提供者和消费者动态交互。

  2. Spring Cloud Config:集中管理配置信息,支持动态刷新,简化配置管理。

  3. Ribbon:实现客户端负载均衡,提高系统的可用性和扩展性。

感悟与启示:

Spring Cloud 提供了强大的工具来构建微服务架构,但每个组件都有其适用场景和优缺点。在实际项目中,建议根据需求选择合适的组件。例如,Nacos 在功能和性能上优于 Eureka,适合大规模应用;Config Server 提供了灵活的配置管理能力,但需要合理组织配置文件。通过实践项目,我们可以更好地理解这些组件的实际应用,为后续的微服务开发打下坚实基础。


http://www.kler.cn/a/515594.html

相关文章:

  • SSM开发(一)JAVA,javaEE,spring,springmvc,springboot,SSM,SSH等几个概念区别
  • 小型分布式发电项目优化设计方案
  • 25/1/22 算法笔记<ROS2> TF变换
  • GD32L233RB 驱动数码管
  • 澎峰科技计算软件栈与沐曦GPU完成适配和互认证
  • 医学图像分析工具09.1:Brainstorm安装教程
  • uni-app微信小程序页面跳转技巧总结
  • 基于 WPF 平台使用纯 C# 实现动态处理 json 字符串
  • Picsart美易照片编辑器和视频编辑器
  • Qt信号与槽底层实现原理
  • AI发展新趋势:从单模态到多模态的技术演进
  • 使用Edge打开visio文件
  • 【Elasticsearch】 Ingest Pipeline `processors`属性详解
  • helm推送到harbor私有库--http: server gave HTTP response to HTTPS client
  • 当你不知道参数在Json中的位置,如何提取这个参数?
  • LeetCode 热题 100_电话号码的字母组合 (57_17_中等_C++)(string(path.begin(),path.end()))
  • 3_高并发内存池_CentralCache(中心缓存)和PageCache(页缓存)申请内存的设计
  • 大数据与AI驱动的商业查询平台:企业市场拓展的变革引擎​
  • 【RabbitMq】RabbitMq高级特性-延迟消息
  • 观察者模式 - 观察者模式的应用场景
  • HippoRAG:受海马体启发的长时记忆模型,提升大语言模型的知识整合能力
  • YOLOv1、YOLOv2、YOLOv3目标检测算法原理与实战第十三天|YOLOv3实战、安装Typora
  • 部门管理新增部门 接收json格式的请求参数 @requestbody
  • JAVA 使用反射比较对象属性的变化,记录修改日志。使用注解【策略模式】,来进行不同属性枚举值到中英文描述的切换,支持前端国际化。
  • Agent群舞,在亚马逊云科技搭建数字营销多代理(Multi-Agent)(下篇)
  • xtermjs重复发送