# springcloud **Repository Path**: muyihao/springcloud ## Basic Information - **Project Name**: springcloud - **Description**: 跟着狂神说完成的spring cloud的学习项目 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-08-07 - **Last Updated**: 2023-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springcloud #### 介绍 该项目是SpringCloud的快速入门项目,本教程跟着狂胜说完成,完成此教程后会堆springcloud的一些核心组件如eureka、ribbon、hystrix、zuul,config等有个大概的了解,之后的学习可以深入了解源码书籍扩展深度,或者接着学习消息队列的学习进行宽度的扩展。 #### 学习大纲 - 服务注册与发现——**Netflix Eureka** - 负载均衡: - 客户端负载均衡——**Netflix Ribbon**(核心接口IRule,实现该接口来完成不同的负载均衡策略) - 服务端负载均衡:——**Feign**(其也是依赖于Ribbon,只是将调用方式RestTemplete 更改成Service 接口) - 断路器——**Netflix Hystrix**(熔断、降级、dashboard) - 服务网关——**Netflix Zuul**(路由、拦截) - 分布式配置——**Spring Cloud Config**(配置中心管理,git->config server->config client) #### 项目环境要求 git maven jdk1.8及以上 mysql 这里面每个子模块都是一个单体应用,其中大部分都注册到了eureka中成立一个微服务。 [springcloud-provider-dept-8081](https://gitee.com/muyihao/springcloud/tree/master/springcloud-provider-dept-8081) 该模块是注册到eureka集群中的服务提供者,通过controller、service、mapper等传统三层架构完成对实体Dept的基本业务操作,端口号8081。后面会搭建该服务的集群,而为了在ribbon测试阶段区分提供服务的不同实例,所以每个provider链接的数据库不同,该实例使用的是来自db01数据库的数据。注意命名时的失误,后面的provider的数据库名为db2而不是db02。 [springcloud-provider-dept-8082](https://gitee.com/muyihao/springcloud/tree/master/springcloud-provider-dept-8082) 该模块和也是对实体Dept的基本业务操作,端口号8082,为搭建服务提供者集群而创建,为区分数据操作来自不同的微服务实例,该实例中使用的数据库为db2。 [springcloud-provider-dept-8083](https://gitee.com/muyihao/springcloud/tree/master/springcloud-provider-dept-8083) 该模块和也是对实体Dept的基本业务操作,端口号8083,为搭建服务提供者集群而创建,为区分数据操作来自不同的微服务实例,该实例中使用的数据库为db3。 [springcloud-provider-dept-hystrix-8081](https://gitee.com/muyihao/springcloud/tree/master/springcloud-provider-dept-hystrix-8081) 该模块是对服务增加了hystrix的熔断功能,具体实现是通过核心的注解 @HystrixCommand(fallbackMethod = "hystrixQueryById") // 来为需要增加熔断的功能找一个备选方法,当服务响应超时则调用这个备选方法,避免级联故障。端口8081。 [springcloud-api](https://gitee.com/muyihao/springcloud/tree/master/springcloud-api) 该模块主要是一个实例模块,内包括一些实例类以及feign的接口,打包方式为pom,以这种方式加入到其它模块的依赖中。这里提到的feign的接口就是以feign以接口形式对ribbon的包装,使得负载均衡以一种接口的形式实现。然后对于hystrix的服务降级,是在这里feign的接口上实现的。 @FeignClient(value="SPRINGCLOUD-PROVIDER-DEPT",fallbackFactory = DeptClientServiceFallbackFactory.class) ,在这个接口上通过注解指定其对应的微服务id,并为改为服务指定一个类,该类中实现了接口提供所有方法的一个备选方法。当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行——服务降级,可以看作是从客户端实现的。 [springcloud-config-client-3355](https://gitee.com/muyihao/springcloud/tree/master/springcloud-config-client-3355) springconfig 的客户端的demo测试,端口3355,通过从spring config的服务的获取配置作为该springboot项目的application.yaml文件配置。 [springcloud-config-provider-dept-8081](https://gitee.com/muyihao/springcloud/tree/master/springcloud-config-provider-dept-8081) 服务提供者的config版本,即通过config server (端口号3344那个)获取服务配置。 [springcloud-config-eureka-7001](https://gitee.com/muyihao/springcloud/tree/master/springcloud-config-eureka-7001) springconfig 的应用在eureka集群上的测试,通过从spring config的服务的获取配置作为该springboot项目的application.yaml文件配置。 [springcloud-config-server-3344](https://gitee.com/muyihao/springcloud/tree/master/springcloud-config-server-3344) springconfig 的服务端,端口3344,能够从码云上的远程git仓库获取配置。这里的git仓库我放在我的springcloudconfig仓库中https://gitee.com/muyihao/springcloudconfig.git,例如想要获取eureka配置时,就访问:http://localhost:3344/config-eureka-dev.yaml,这里的dev是环境名,具体的访问方式在config官网文档有定义。 [springcloud-consumer-dept-80](https://gitee.com/muyihao/springcloud/tree/master/springcloud-consumer-dept-80) 这个是消费者的微服务,用来测试ribbon负载均衡的访问服务提供者,端口号为80.这里还在项目中年自己实现了一个Ribbon选择实例的策略,名为myRule。 [springcloud-consumer-dept-feign](https://gitee.com/muyihao/springcloud/tree/master/springcloud-consumer-dept-feign) 这个是使用feign的方式封装ribbon来调用服务提供者。 [springcloud-consumer-hystrix-dashboard](https://gitee.com/muyihao/springcloud/tree/master/springcloud-consumer-hystrix-dashboard) 这个是对hystix的dashboard的测试,但是好像是由于版本原因,虽然测试时ping有数据,但是dashboard界面一直loading。 [springcloud-eureka-7001](https://gitee.com/muyihao/springcloud/tree/master/springcloud-eureka-7001) eureka注册中心,端口号7001 [springcloud-eureka-7002](https://gitee.com/muyihao/springcloud/tree/master/springcloud-eureka-7002) eureka注册中心,端口号7002,为了搭建集群,注意要和上一个注册中心的微服务名一样,否则无法搭建集群。 [springcloud-eureka-7003](https://gitee.com/muyihao/springcloud/tree/master/springcloud-eureka-7003) eureka注册中心,端口号7003,为了搭建集群,注意要和上一个注册中心的微服务名一样,否则无法搭建集群。 [springcloud-zuul-9527](https://gitee.com/muyihao/springcloud/tree/master/springcloud-zuul-9527) zuul网关,统一访问地址,然后再转发到不同的微服务,同时要拦截对微服务的直接访问。 [pom.xml](https://gitee.com/muyihao/springcloud/blob/master/pom.xml) 项目的总maven文件,里面做了依赖管理。 具体实现过程可以区看狂神说的教程: B站UP主狂神说https://www.bilibili.com/video/BV1jJ411S7xr 两个做得很完整的笔记: [SpringCloud快速入门!-KuangStudy-文章](https://www.kuangstudy.com/bbs/1396312432749678593) [狂神说SpringCloud学习笔记-KuangStudy-文章](https://www.kuangstudy.com/bbs/1374942542566551554)