从零开始学习SpringCloud

本文详细介绍了SpringCloud在微服务架构中的应用,包括服务注册与发现、断路器、服务调用等多个核心模块,并提供了作者的学习路径及对各模块的理解分析。

从零开始学习SpringCloud

个人博客传送门


前段时间把SpringBoot刷了一遍,感觉是时候深入研究一下微服务架构了,在网上看到了方志鹏的书,觉得不错便关注了他的博客,由于前期一直关注微笑并且跟着微笑的达人课完成了SpringBoot的入门,因此在此感谢两位大佬,令附上两位大佬的博客地址。springboot的入门

我将springcloud处理微服务架构分为下面的模块进行慢慢的蚕食:

  1. 服务的注册和发现
  2. 断路器
  3. 服务调用
  4. 路由网关
  5. 分布式配置中心
  6. 消息总线
  7. 服务链路追踪

未完待续中。。。

附上我的github地址,从零开始学习springcloud
以下是我自己对上述模块的认识和分析:

  1. 在服务的注册和发现和调用之间有三个模块:
  • 注册中心
  • 服务提供者
  • 服务消费者
  1. 对服务的调用:
  • ribbon + resttmplate 是客户端的一种负载均衡的方式
  • feign :原理也是基于ribbon实现的。只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。
  1. 断路器:为了保证服务的高可用,引入了断路器的概念,当访问一个服务的不可用得到了一定的阈值时,断路器将会被打开两种实现:
  • restTemplate 和 ribbon 方式,需要在调用的服务上增加熔断的方法即可
  • feign,需要在接口的FeignClient注解中增加callback方法即可,指向该接口的实现类,该实现类中重写的方法即出现断路时调用的方法。
  1. 路由网关(zuul):主要做的是路由的转发和过滤,zuul默认和Ribbon结合实现了负载均衡的功能。
  • 路由的转发,类似于nigix反向代理,将对应的路径代理到对应的服务器上去
  • 路由的过滤,通过自定义过滤器,然后继承zuulfilter来自定义过滤的类型和优先级和逻辑等 ;
  1. 分布式配置中心(Configure):在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件
  • 分为两个角色:分别是配置的服务器和配置的客户端
  • 延伸到微服务可以将配置中心做成一个微服务,并且将其集群    
  1. 消息总线(Bus):消息总线将分布式的节点用轻量的消息代理连接起来,它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控主要是rabbitmq的用法
  2. 服务链路追踪(Sleuth):在分布式系统中提供追踪解决方案

对于微服务架构,启动的时候会启动一个Trace,一系列spans组成的一个树状结构
在访问的时候会跟随目前访问的位置和所用的时间,可以快速的反应和查找问题
ZipkinServer ==》用来收集调用信息

  1. docker部署springcloud项目
  2. 服务注册(consul):它是一个提供服务发现和配置的工具,consul具有分布式、高可用、高扩展性。
    在这里插入图片描述
### Spring Cloud基础教程 #### 1. Spring Cloud简介 Spring Cloud是一个基于Spring Boot的微服务架构开发工具集,它提供了一系列组件来解决微服务架构中的常见问题,如服务注册与发现、配置管理、负载均衡、熔断器等。Spring Cloud整合了Netflix的开源组件,并对其进行了封装,使得开发者可以更加轻松地构建和管理分布式系统[^3]。 #### 2. Spring Cloud的核心组件 - **服务注册与发现**:Spring Cloud Netflix Eureka 是一个服务注册与发现的组件,它允许服务实例在启动时自动注册自己,并且其他服务可以通过Eureka来查找这些服务实例。 - **配置管理**:Spring Cloud Config 提供了外部化的配置支持,允许将配置信息存储在一个集中的位置,并且可以在运行时动态更新配置。 - **负载均衡**:Spring Cloud Netflix Ribbon 是一个客户端负载均衡器,它可以与Eureka结合使用,实现对服务调用的智能路由。 - **熔断器**:Spring Cloud Netflix Hystrix 提供了断路器模式的实现,用于处理服务间的依赖故障,防止级联失败。 - **网关**:Spring Cloud Gateway 是一个新的API网关,提供了路由、过滤等功能,可以用来管理对外暴露的服务接口。 #### 3. 构建第一个Spring Cloud应用 ##### 创建父工程 为了更好地组织项目结构,通常会先创建一个Maven父工程,用于聚合其他微服务模块。父工程的`pom.xml`文件中应该包含所有子模块的依赖管理信息。 ```xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.study.springcloud</groupId> <artifactId>spring-cloud-demo</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>eureka-server</module> <module>service-provider</module> <module>service-consumer</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR8</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project> ``` ##### 创建Eureka Server Eureka Server是服务注册与发现的核心组件。创建一个名为`eureka-server`的模块,并在其`pom.xml`中添加Eureka Server的依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> ``` 接着,编写启动类并启用Eureka Server: ```java package com.study.springcloud.eurekaserver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } } ``` ##### 创建服务提供者 服务提供者需要向Eureka Server注册自身。创建一个名为`service-provider`的模块,并在其`pom.xml`中添加Eureka Client的依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies> ``` 编写启动类并启用Eureka Client: ```java package com.study.springcloud.serviceprovider; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ServiceProviderApplication { public static void main(String[] args) { SpringApplication.run(ServiceProviderApplication.class, args); } } ``` ##### 创建服务消费者 服务消费者需要通过Eureka Server来发现服务提供者。创建一个名为`service-consumer`的模块,并在其`pom.xml`中添加Eureka Client的依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies> ``` 编写启动类并启用Eureka Client: ```java package com.study.springcloud.serviceconsumer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ServiceConsumerApplication { public static void main(String[] args) { SpringApplication.run(ServiceConsumerApplication.class, args); } } ``` #### 4. 测试微服务调用 确保所有服务都已启动,包括Eureka Server、服务提供者和服务消费者。访问Eureka Server的管理界面(默认为`http://localhost:8761`),可以看到服务提供者和服务消费者已经成功注册。服务消费者可以通过服务名称调用服务提供者的API。 #### 5. 进阶学习 随着对Spring Cloud基础的掌握,可以进一步学习更高级的主题,如使用Spring Cloud Gateway作为API网关、使用Spring Cloud Sleuth进行分布式追踪、使用Spring Cloud Stream进行消息驱动的微服务开发等。此外,还可以探索Spring Cloud与Kubernetes等云原生技术的集成,以构建更加健壮和可扩展的微服务架构[^2]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值