SpringCloud

2019-08-14 16:00:00

SpringCloud一系列框架的有序集合。SpringCloud并没有重复制造,只是将目前各家公司开发的比较幼稚、经得起实际考验的服务框架组合起来,通过SpringBoot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易布置和易维护的分布式系统开发工具包。

使用SpringBoot开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、消息总线、断路器、配置中心、负载均衡、数据监控等,都可以用SpringBoot开发风格做到一键启动和部署。
SpringCloud前景
SpringCloud对于中小型互联网公司来说是一种福音,因为随着近几年微服务架构和Docker容器概念的火爆,,有效推进服务端软件系统技术水平的进步。这类公司往往没有实力或者没有足够的资金投入去开发自己的分布式系统基础设施,使用SpringCloud一站式解决方案能在冷静应对业务发展的同时大大减少开发本钱。也会让SpringCloud未来越来越“云”化的软件开发风格中立有一席之地,尤其是目前各种的分布式解决方案中提供了规范化的全站式的技术方案,意义可能会堪比当年Servlet规范的诞生 
springcloud说明:
版本名以字母排序。比如最早的Releas版本为Angel第二个Releas版本为Brixton
springcloud项目是由多个独立项目集合而成的每个项目都是独立的各自进行自己的迭代和版本发布。springcloud不方便使用版本号来管理,而是使用版本名。以防止和子项目版本号的抵触。
当一个版本的updat积累的比较多或者解决了一个严重bug时,会发布一个ServiceReleas版本,简称SR后面带的数字就是该大版本下的第一次发布。
下面只简单介绍下经常用的操作:
修改请求路径的过滤器
上面这个配置的例子表示,当请求路径匹配到/name/**会将包含name和后边的字符串接去掉转发,StripPrefix=2就代表截取路径的个数,这样配置后当请求/name/bar/foo后端匹配到请求路径就会变成http://nameservice/foo
还是cloud-gateway-eureka项目中进行测试,修改 application.yml如下:
spring:
cloud:
routes:
-id:nameRoot
uri:lb://spring-cloud-produc
predicates:
-Path=/name/**
filters:
-StripPrefix=2
StripPrefixFilter
StripPrefixFilter一个请求路径截取的功能,可以使用这个功能来做特殊业务的转发。
application.yml配置如下:
spring:
cloud:
gateway:
routes:
-id:nameRoot
uri:http://nameservic
predicates:
-Path=/name/**
filters:
-StripPrefix=2
配置完后重启 cloud-gateway-eureka项目,访问地址页面会交替显示:
helloworld!
helloworldsmile!
和直接访问地址 http://localhost:8888/hello展示的效果一致,说明请求路径中的name/foo/已经被截取。
PrefixPathFilter
StripPrefix作用和 PrefixPathFilter正相反,URL路径前面添加一部分的前缀
spring:
cloud:
gateway:
routes:
-id:prefixpath_rout
uri:http://example.org
filters:
-PrefixPath=/mypath
大家可以下来去测试,这里不在演示。
熔断路由器
之前的SpringCloud系列文章中,大家对熔断应该有了一定的解,如过不了解可以先读这篇文章:熔断器 Hystrix
SpringCloudGatewai也可以使用 Hystrix熔断特性,流量过大时进行服务降级,同样我还是首先给项目添加上依赖。
org.springframework.cloud
spring-cloud-starter-netflix-hystrix
配置示例
spring:
cloud:
gateway:
routes:
-id:hystrix_rout
uri:http://example.org
filters:
-Hystrix=myCommandNam
配置后,gatewai将使用 myCommandNam作为名称生成 HystrixCommand对象来进行熔断管理。如果想添加熔断后的回调内容,需要在添加一些配置。
spring:
cloud:
gateway:
routes:
-id:hystrix_rout
uri:lb://spring-cloud-produc
predicates:
-Path=/consumingserviceendpoint
filters:
-name:Hystrix
args:
name:fallbackcmd
fallbackUri:forward:/incaseoffailureusethi
fallbackUri:forward:/incaseoffailureusethi配置了fallback时要会调的路径,当调用 Hystrixfallback被调用时,请求将转发到/incaseoffailureuset这个 URI
限速路由器
限速在高并发场景中比较常用的手段之一,可以有效的保证服务的整体稳定性,SpringCloudGatewai提供了基于 Redi限流方案。所以我首先需要添加对应的依赖包spring-boot-starter-data-redis-react
org.springframework.cloud
spring-boot-starter-data-redis-reactive
配置文件中需要添加 Redi地址和限流的相关配置
spring:
application:
name:cloud-gateway-eureka
redis:
host:localhost
password:
port:6379
cloud:
gateway:
discovery:
locator:
enabled:true
routes:
-id:requestratelimiter_rout
uri:http://example.org
filters:
-name:RequestRateLimit
args:
redis-rate-limiter.replenishRate:10
redis-rate-limiter.burstCapacity:20
key-resolver:"#{@userKeyResolver}"
predicates:
-Method=GET
filter名称必需是RequestRateLimit
redis-rate-limiter.replenishR允许用户每秒处置多少个请求
redis-rate-limiter.burstCapac令牌桶的容量,允许在一秒钟内完成的最大请求数
key-resolv使用 SpEL按名称引用 bean
项目中设置限流的战略,创立 Config类。
publicclassConfig{
@Bean
KeyResolvuserKeyResolv{
returnexchang->Mono.justexchange.getRequest.getQueryParam.getFirst"user";
}
}
根据请求参数中的user字段来限流,也可以设置根据请求 IP地址来限流,设置如下:
@Bean
publicKeyResolvipKeyResolv{
returnexchang->Mono.justexchange.getRequest.getRemoteA ddress.getHostNam;
}
这样网关就可以根据不同战略来对请求进行限流了
重试路由器
RetryGatewayFiltSpringCloudGatewai对请求重试提供的一个 GatewayFiltFactori
配置示例:
spring:
cloud:
gateway:
routes:
-id:retry_test
uri:lb://spring-cloud-produc
predicates:
-Path=/retri
filters:
-name:Retri
args:
retries:3
statuses:BA D_GA TEWA Y
RetriGatewayFilt通过这四个参数来控制重试机制:retries,<SERI一些列的状态码配置。STATUSES,METHODS,和 seri
retri重试次数,默认值是3次
statusHTTP状态返回码,取值请参考:org.springframework.http.HttpStatu
method指定哪些方法的请求需要进行重试逻辑,默认值是GET方法,取值参考:org.springframework.http.HttpMethod
seri一些列的状态码配置,取值参考:org.springframework.http.HttpStatus.Seri符合的某段状态码才会进行重试逻辑,默认值是SERVER_ERROR值是5也就是5XX5开头的状态码)共有5个值。

本文由中软卓越(西安)汇集整理,转载请注明作者及出处。

如需学习java、UI设计、软件测试、Python、大数据、嵌入式、Linxu云计算,请点击咨询,加入我们让你的未来不再迷茫。

关于我们

【中软卓越】-中软国际旗下高端教育品牌,是中软国际有限公司投资的大型人才服务机构,是中软国际人才战略的核心组成部分之一,承担集团发展过程中人才储备和培养的任务;专注IT培训37年,国内高端IT培训品牌,教育部指定官方IT人才培训机构。专注java培训、UI设计培训、软件测试培训、Python培训、大数据培训、嵌入式培训、Linxu云计算培训等培训课程。217家合作院校,880家合作企业,真实项目实战,素质拓展,职业规划。零首付,100%保障就业,先就业,后付款。

最牛逼的毕业学员入职名企享受高薪就业。880家合作企业,年培育学员人数逾6000人,毕业学员就职于中软国际、百度、腾讯、阿里巴巴、IBM、华为科技、中兴通讯、软通动力等知名企业。

还有什么疑问?我们全面为你解答!为您提供一对一专人服务,请点击下方咨询

  • 卓越资讯
  • 猜你想看
  • 常见问题

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。[详细课程]

    软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程;软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。[详细课程]

    软件测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。[详细课程]

    Python是一种面向对象的解释型计算机程序设计语言,语法简洁清晰,特色之一是强制用空白符作为语句缩进,它常被昵称为胶水语言,能够把用其他语言制作的各种模块。[详细课程]

    UI设计分为实体UI和虚拟UI,互联网说的UI设计是虚拟UI,一般是指对软件的人机交互、操作逻辑、界面美观的整体设计。[详细课程]

    大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法通过人脑甚至主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。[详细课程]

    云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。[详细课程]

    西安市长安北路8号高速大厦三楼

    电话:029-61876930

pc蛋蛋 pc蛋蛋官方网址 江苏快3代理 河北快三app下载 河北快3 江苏快3投注 河北快3平台 pc蛋蛋网址 pc蛋蛋 pc蛋蛋网址