SpringCloud是如何运行的?
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是如何运行的?的更多相关文章
- SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载)
场景 SpringCloud学习之运行第一个Eureka程序: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/90611451 S ...
- Feign原理 (图解)
疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 疯狂创客圈 正在进行分布式和高并发基础原理的研习,进行已经发布一些基础性的文章: 一.版本1 :springcloud ...
- java.lang.AbstractMethodError: null
在使用springcloud的时候运行报这个错,原因是版本冲突导致的,在idea中创建springcloud项目的时候,这里默认是${spring-cloud.version},但是如果你使用的是高版 ...
- eureka解析hostname为localhost问题 (转)
https://blog.csdn.net/liufei198613/article/details/79583686 公司的springcloud已经上线运行,但是最近测试环境老是会出现一个诡异的问 ...
- SpringCloud IDEA 教学 番外篇 后台运行Eureka服务注册中心
写在开头 研发过程中经常要做的事就是启动Eureka服务注册中心,每每都要启动一个IDEA,很是困扰.现在分享一个后台启动服务注册中心的方法. 准备工作 1打包一个eureka服务注册中心jar包(注 ...
- springcloud学习之路: (二) springcloud打jar包并批量运行
springcloud中内置了tomcat所以打包的时候是直接把tomcat打入jar包 之后就可以做到, 单独的服务, 独立的jar包, 独立运行的效果了. 一.打jar包 1. 在pom.xml文 ...
- SpringCloud 设置多个运行实例的端口号
使用SpringCloud做集群,开发.测试阶段,经常要运行一个模块的多个实例,要修改端口号. 有3种方式. 方式一:配置文件 server.port=9001 方式二.修改引导类,控制台输入参数值 ...
- springcloud gateway 项目打包部署运行
新建一个springboot项目然后做了一个小demo跳转到baidu pom <?xml version="1.0" encoding="UTF-8"? ...
- idea中Springcloud同时运行多个模块、微服务
idea中有个窗口叫做 Run DashBoard 在这里可以管理多个模块的启停,这个面板一般情况下是关闭的打开Run DashBoard面板 在工程的.idea中找到workspace.xml,并找 ...
随机推荐
- ZOJ-1107-FatMouse and Cheese-dfs+记忆化搜索
FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension ...
- Spark 读写数据、抽象转换 拾遗
读 package com.test.spark import org.apache.spark.sql.{Dataset, Row, SaveMode, SparkSession} /** * @a ...
- java模拟页面表单登录
简单的通过表单的post请求提交到后台 package testpostlogin; import java.io.BufferedReader; import java.io.File; impor ...
- UBOOT命令简写说明
所以命令都可以简写,只要命令前面的一部分不会跟其它命令相同,就可以不用写全整个命令. save 命令 CRANE2410 # sa Saving Environment to Flash... Un- ...
- new linux setup, yum command
7 yum list 9 cd /etc/yum.repos.d/ 55 history | grep yum 56 yum -y list screen* 57 yum -y instal ...
- [NOIP2019模拟赛]LuoguP4261白金元首与克劳德斯
题目描述 给出坐标系中n个矩形,类型1的矩形每单位时间向x轴正方向移动1个单位,类型2的矩形向y轴正方向,初始矩形不重叠,一个点被矩形覆盖当且仅当它在矩形内部(不含边界),求$(-\infty ,+\ ...
- 【学术篇】状态压缩动态规划——POJ3254/洛谷1879 玉米田Corn Field
我要开状压dp的坑了..直播从入门到放弃系列.. 那就先拿一道状压dp的水题练练手吧.. 然后就找到了这一道..这道题使我清醒地认识到阻碍我的不是算法,而是视力= = 传送门: poj:http:// ...
- Luogu P2042 [NOI2005]维护数列(平衡树)
P2042 [NOI2005]维护数列 题意 题目描述 请写一个程序,要求维护一个数列,支持以下\(6\)种操作:(请注意,格式栏中的下划线'_'表示实际输入文件中的空格) 输入输出格式 输入格式: ...
- Python全栈开发:进度条
import sys import time for i in range(31): # 清空打印内容 sys.stdout.write("\r") # 控制输出样式 sys.st ...
- ODOO/OPENERP的网页模块QWEB简述
1.web 模块 注意,OpenERP 模块中 web 部分用到的所有文件必须被放置在模块内的 static 文件夹里.这是强制性的,出于安全考虑. 事实上,我们创建的文件夹 CSS,JS 和 XML ...