SpringCloud是基于SpringBoot这一高度自动化的应用开发框架,将各类业界比较知名的、得到过实践反馈的开元服务治理相关的技术框架进行优化整合的框架,是一种开发方式的优化和组合,,是一组框架的统称,基于SpringBoot的starter定制,实现开箱即用的目标,通过简单的声明式注解,就能实现服务的调用、负载均衡、限流、熔断等机制

SpringCloud的核心组件

首先要通过定制一套基于SpringBoot的starter以便快速进行框架依赖的集成于配置,所以用springcloud进行微服务开发时,在项目中通过“spring-cloud-starter-parent”父依赖来实现其他框架级组件的快速引入,虽然只是很简单的引入了一个父依赖,但是实际上却是引入了整个SpringBoot的框架体系一级SpringCloud框架体系的整个依赖

核心组件:

SpringCloudStarters:SpringBoot式的启动项目,为SC提供了开箱即用的依赖管理;

Consul:是一个用Go语言编写的服务发现与配置工具,可作为整个微服务体系的服务注册中心;

Eureka:是一个用java语言编写的服务注册中心;

Feign:是一种声明式、模块化的http客户端,用于简化微服务间的调用行为;

Ribbon:是一个进程间通信库(远程过程调用),内置了软件负载均衡器,主要的使用模型包括REST调用,支持各种序列化方案;

Zuul:是一个网关服务,他提供动态路由、监视、弹性、安全性等等;

Hystrix:是一个延迟和容错库,旨在隔离对远程系统、服务和第三方库的访问点,停止级联故障,并在不可避免的复杂分布式系统中启用弹性;

SpringCloudConfig:配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion;

各个服务间进行通讯调用的核心问题,也就是通过Feign进行客户端的服务调用,微服务动支持通过Eureka进行多节点集群部署,客户端调用时还需要实现负载均衡等功能,在SpringCloud中是通过Feign框架组合Ribbon框架来实现的

微服务系统中还要实现限流熔断的核心问题:服务的限流和熔断,如果服务间的调用出现阻塞就需要进行及时的限流,并通过熔断来保证服务的基本可用性,可通过Zuul和Hystrix服务,通过注解的方式来提供这样的功能机制

服务的配置管理核心问题:通过SpringCloudConfig 独立配置服务管理来实现,通过该组件实现SC体系中所哟偶微服务应用配置的集中化管理

SpringCloud的核心注解:

@EnableDiscoveryClient:定义在spring-cloud-commons包中,便于快速实现服务注册与发现的功能注解定义。在主启动类上定义;

  @EnableDiscoveryClient注解的定义中通过“@import({EnableDiscoveryClientImportSelector.class})”类,此类通过定义“isEnable()”方法表示开始服务注册与发现等功能,染红其父类型“SpringFactoryImportSelector”通过“selectImports()”方法开始扫描eureka继承的starter依赖包。需要在项目中引入“spring-cloud-starter-consul-discovery”依赖包,这个依赖的“META-INF/spring.factories”文件指向具体依赖“spring-cloud-consul-discovery”,而该依赖中的“META-INF/spring-factories”文件则包含了一系列自动配置类,这些自动配置类会在应用启动时进行初始化和加载,完成微服务与Eureka的连接。

以上说明了SC进行微服务自动发现注册配置的基本原理,实际上还是基于SpringBoot的机制来实现的,具体怎样交互连接的可看“spring-cloud-consul-discovery”的源码

@EnableFeignClient:用于告诉框架扫描所有通过注解@FeignClient定义的feign客户端。服务消费方通过@EnableFeignClients注解开启配置后,可以通过@FeignClient注解就可以进行服务调用了,而且实现了客户端负载均衡。这个注解默认是会默认开启Ribbon代理的,而Ribbon是实现客户端负载均衡的一个组件,通过从Eureka拉取服务节点信息,从而以轮询的方式转发客户端调用请求到不同的服务端节点来实现负载均衡。

@EnableCircuitBreake:通过此注解来使用断路器,该注解会引入Hystrix的配置,其过程与@EnableEurekaClient注解的过程一致,通过导入EnableCircuitBreakerImportSelector类,开启断路器设置,如果项目中引入了“spring-cloud-starter-hystrix”依赖包,那么在应用加载时会初始化Hystrix相关的自动配置类。

SpringCloud是如何运行的?的更多相关文章

  1. SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载)

    场景 SpringCloud学习之运行第一个Eureka程序: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/90611451 S ...

  2. Feign原理 (图解)

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 疯狂创客圈 正在进行分布式和高并发基础原理的研习,进行已经发布一些基础性的文章: 一.版本1 :springcloud ...

  3. java.lang.AbstractMethodError: null

    在使用springcloud的时候运行报这个错,原因是版本冲突导致的,在idea中创建springcloud项目的时候,这里默认是${spring-cloud.version},但是如果你使用的是高版 ...

  4. eureka解析hostname为localhost问题 (转)

    https://blog.csdn.net/liufei198613/article/details/79583686 公司的springcloud已经上线运行,但是最近测试环境老是会出现一个诡异的问 ...

  5. SpringCloud IDEA 教学 番外篇 后台运行Eureka服务注册中心

    写在开头 研发过程中经常要做的事就是启动Eureka服务注册中心,每每都要启动一个IDEA,很是困扰.现在分享一个后台启动服务注册中心的方法. 准备工作 1打包一个eureka服务注册中心jar包(注 ...

  6. springcloud学习之路: (二) springcloud打jar包并批量运行

    springcloud中内置了tomcat所以打包的时候是直接把tomcat打入jar包 之后就可以做到, 单独的服务, 独立的jar包, 独立运行的效果了. 一.打jar包 1. 在pom.xml文 ...

  7. SpringCloud 设置多个运行实例的端口号

    使用SpringCloud做集群,开发.测试阶段,经常要运行一个模块的多个实例,要修改端口号. 有3种方式. 方式一:配置文件 server.port=9001 方式二.修改引导类,控制台输入参数值 ...

  8. springcloud gateway 项目打包部署运行

    新建一个springboot项目然后做了一个小demo跳转到baidu pom <?xml version="1.0" encoding="UTF-8"? ...

  9. idea中Springcloud同时运行多个模块、微服务

    idea中有个窗口叫做 Run DashBoard 在这里可以管理多个模块的启停,这个面板一般情况下是关闭的打开Run DashBoard面板 在工程的.idea中找到workspace.xml,并找 ...

随机推荐

  1. Android Support 包的作用、用法

    1, Android Support V4, V7, V13是什么?本质上就是三个java library. 2,  为什么要有support库?如果在低版本Android平台上开发一个应用程序,而应 ...

  2. CSS 常用的兼容性调试技巧

    1.实现所有浏览器主页居中 Firefox下主页居中代码:.box{margin:0px auto} IE5.5下主页居中代码:body{text-align:center;} 将以上两种代码,合在一 ...

  3. Windows下 vundle的安装和使用

    准备工作 1. 安装git 去官网下载,安装即可. 2. 添加git的环境变量 并将Git 的安装路径加入环境变量Path,如 D:\Program Files\Git\cmd 然后运行cmd,输入 ...

  4. vue-select-lang

    https://cli.vuejs.org/zh/guide/build-targets.html#%E5%BA%93 https://github.com/lipis/flag-icon-css

  5. java_Map集合

    import java.util.HashMap; public class MapTest { /** * 1.Map集合是双列几个,一个元素包含两个值(key,value) * 2.Map集合中的 ...

  6. 确认(confirm 消息对话框)语法:confirm(str); 消息对话框通常用于允许用户做选择的动作,如:“你对吗?”等。弹出对话框(包括一个确定按钮和一个取消按钮)

    确认(confirm 消息对话框) confirm 消息对话框通常用于允许用户做选择的动作,如:"你对吗?"等.弹出对话框(包括一个确定按钮和一个取消按钮). 语法: confir ...

  7. [USACO2005 nov] Grazing on the Run【区间Dp】

    Online Judge:bzoj1742,bzoj1694 Label:区间Dp 题目描述 John养了一只叫Joseph的奶牛.一次她去放牛,来到一个非常长的一片地,上面有N块地方长了茂盛的草.我 ...

  8. JS 标签页切换

    一 <!DOCTYPE html><html><head><meta charset="utf-8"/><title>自 ...

  9. Django缓存机制以及使用redis缓存数据库

    目录 Django 配置缓存机制 缓存系统工作原理 Django settings 中 默认cache 缓存配置 利用文件系统来缓存 使用Memcache来缓存: 使用Local-memory来缓存: ...

  10. jquery ajax 放在重复点击事件beforeSend方法

    防止重复数据在实际项目开发中,提交表单时常常由于网络或者其原因,用户点击提交按钮误认为自己没有操作成功,进而会重复提交按钮操作次数,如果页面前端代码没有做一些相应的处理,通常会导致多条同样的数据插入数 ...