
Spring Cloud
ZhiYuanYe
.
展开
-
reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE response解决方案
一、背景可能大家在使用Spring Cloud Gateway构建微服务网关的时候,过五关斩六将,Reactor没能难倒我们,链路追踪没能难倒我们,最后在上线之后发现许多奇妙的问题,这些奇妙的问题还无从下手,比如这个堆栈,深入使用过SCG的人一定不会陌生:reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE responseSuppressed: reactor.core.publ原创 2020-08-09 22:50:40 · 64178 阅读 · 32 评论 -
为你的spring cloud微服务添加宕机邮件通知
在恶劣线上环境中,我们最担心的是服务挂掉,每当这个时候,运维就想吃柠檬(CNM)了,一些运维工具也可以实现这个功能,但是,既然用了spring cloud,就可以享受它带来的福利吧。 此功能基于spring boot admin这个监控工具,了解轻戳:http://blog.youkuaiyun.com/rickiyeat/article/details/73109328来看看它的guide referenc原创 2017-06-14 14:48:55 · 13716 阅读 · 5 评论 -
Spring Cloud组件完整demo
托管于github:https://github.com/Lovnx/micro-service说明:**工程名** **描述** **端口**eureka-server 服务发现与注册中心 7070ribbon 负载均衡器 7071config-server 配置管理中心 7072zuul 动态路由器 7073service-A A服务,用来测试服务间调用与路由原创 2017-03-22 22:46:57 · 29217 阅读 · 61 评论 -
NUMBEROF_RETRIES_NEXTSERVER_EXCEEDED、NUMBEROF_RETRIES_EXCEEDED
先说一下场景:请求一个url,第一次会出现这个错误,后面的请求就不会。原因:是ribbon的MaxAutoRetriesNextServer数量超过了我们总的服务器-1,这个东西比较玄乎,叫做“区域感知负载均衡”。我的配置信息:# 在同一个服务器上的最大重试数 (不包括第一次重试) ribbon.MaxAutoRetries=1 # 最大重试服务器数量(不包括第一台服务器) ribbon.M原创 2017-04-21 13:45:11 · 6748 阅读 · 3 评论 -
解决Spring Cloud第一次调用失败
在Spring Cloud中,即使项目没有整合Hystrix后,也可能会出现首次调用失败的问题,要如何解决该问题呢? Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码。而首次请求往往会比较慢(因为Spring的懒加载机制,要实例化一些类),这个响应时间可能就大于1秒了。解决方法:在项目的配置文件里面添加:hystrix: command: de原创 2017-08-06 11:24:14 · 9264 阅读 · 0 评论 -
如何将已有项目改造为Spring Boot项目
英文原版地址:http://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html#howto-convert-an-existing-application-to-spring-boot85.1创建可部署的war文件生成可部署war文件的第一步是创建一个 SpringBootS翻译 2017-02-27 17:31:42 · 38468 阅读 · 9 评论 -
Ribbon负载均衡策略配置
在这里吐槽一句:网上很多文章真是神坑,你不看还好,看了只会问题越来越多,就连之前的问题都没有解决!!!不多说了,Ribbon作为后端负载均衡器,比Nginx更注重的是请求分发而不是承担并发,可以直接感知后台动态变化来指定分发策略。它一共提供了7种负载均衡策略: 策略名 策略声明 策略描述 实现说明原创 2017-03-22 14:12:26 · 53042 阅读 · 18 评论 -
Spring Cloud 负载均衡后,某个服务挂掉后保证数据一致性
前提是有zuul服务!说一下背景:一个eureka做的服务发现,2个微服务,1个zuul,当一个微服务挂掉后,由于eureka是默认集成了轮询策略,所以,当访问服务时,有50%几率是请求失败的,如何保证挂掉一个服务后还能100%请求成功呢?1、使用Hystrix2、让zuul只路由到活着的那个服务: 添加依赖: <dependency> <groupId>com.squareup.o原创 2017-04-14 18:07:43 · 21411 阅读 · 4 评论 -
Spring Cloud生态圈简介
说到Spring Cloud就不得不提一下微服务,什么是微服务呢?就是Microservice,字面意思来看就是小服务,小型服务,微小型服务,然而它是与传统服务的相对概念。承载传统服务的Web项目,所有功能集成到一个系统,最终打包成一个war包,部署于Web容器,或单机,或集群,基本上没有什么外部的依赖,其有如下特点: (优点) - 开发简单直接,集中式管理 - 基本不会重复开发 -原创 2017-03-01 22:21:06 · 18289 阅读 · 4 评论 -
分布式后端接口幂等性设计思路
在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景:一个订单创建接口,第一次调用超时了,然后调用方重试了一次在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次当这笔订单开始支付,在支付请求发出之后,在服务端发生了扣钱操作,接口响应超时了,调用方重试了一次一个订单状态更新接口,调用方连续发送了两个消息,一个是已创建,一个是已付款。但是你先接收到已付款,然后又接收到了已创建转载 2017-10-30 10:48:14 · 7028 阅读 · 1 评论 -
Spring Boot 内嵌容器Undertow参数设置
配置项:# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程,不要设置过大,如果过大,启动项目会报错:打开文件数过多server.undertow.io-threads=16# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载,高吞吐量的应用可以设置大一点server.unde原创 2017-12-26 20:50:15 · 36666 阅读 · 0 评论 -
Spring Security 4.x -> 5.x 踩坑记录
1、应用服务基路径问题这个问题应该是Spring Boot 2.0升级带来的,既然遇到了,就在这里写一写。笔者在授权服务器想设置一个统一基路径,按照Spring Boot 1.0,是这样的:server.context-path=/xxx但是升级之后并不好使,最后看官方文档发现改掉了,现在是这样的:server.servlet.context-path=/xxx2、AuthenticationMan原创 2018-04-15 15:39:56 · 10917 阅读 · 1 评论 -
为什么Netflix的API网关Zuul要升级为异步非阻塞架构?
Netflix宣布了通用API网关Zuul的架构转型。Zuul原本采用同步阻塞架构,转型后叫作Zuul2,采用异步非阻塞架构。Zuul2和Zuul1在架构方面的主要区别在于,Zuul2运行在异步非阻塞的框架上,比如Netty。Zuul1依赖多线程来支持吞吐量的增长,而Zuul 2使用的Netty框架依赖事件循环和回调函数。某组织对负责这次转型的Netflix项目经理Mikey Cohen进行了...原创 2018-05-25 10:41:51 · 4117 阅读 · 0 评论 -
基于Lua的Spring Cloud网关高可用通用Ngnix插件
项目github地址:点击跳转场景痛点在Spring Cloud微服务架构体系中,我们往往会部署一个Zuul集群来横向扩展我们的微服务应用,集群的上层是Nginx软负载,在实际情况中,往往会遇到Zuul宕机的尴尬事情,这时候从Nginx到这台机器的请求就会全部失效。此项目针对此痛点,用lua脚本实现定时拉取特定服务地址,动态无感知增减Zuul在Nginx中的负载节点。如果您希望...原创 2018-05-23 17:10:18 · 3005 阅读 · 0 评论 -
Zuul中整合Swagger2,实现对源服务API测试
前言我们知道,Swagger2整合到项目中,可以非常方便地进行接口测试,是前后端对接效率提高。现在,我们可以在Zuul中整合Swagger2,通过Zuul配置文件配置的映射路径,来生成源服务接口的测试Dashboard。 github项目源码地址1、Zuul Server工程pom.xml文件中引入依赖: &lt;dependency&gt; ...原创 2018-06-06 10:21:27 · 4274 阅读 · 2 评论 -
《重新定义Spring Cloud实战》
---- Spring Cloud中国社区(http://springcloud.cn)是国内首个基于Spring Cloud微服务体系创建的非盈利技术社区。自2016年创建以来,在北京,上海,深圳,成都等地举办了多次技术沙龙,提供技术交流平台,帮助数万开发者快速学习Spring Cloud并用于生产。为更好的推动Spring Cloud在中国的发展,让更多的开发者受益。社区针对Spring Cl...原创 2018-09-17 23:20:52 · 13852 阅读 · 10 评论 -
使用Nacos实现Spring Cloud Zuul的动态路由
一.前言Nacos是阿里巴巴开源的致力于服务发现与管理、动态配置管理,以及动态DNS服务的中间件,目前已发布至0.5.0版本,除了与Spring Cloud更加紧密结合以外,还丧心病狂地支持JDK11。如果您目前的项目碍于Eureka的性能,而又缺乏成本引进Consul,那么Nacos是您最好的选择。好了,回到正题,在上周许进搞了一个使用Nacos实现Spring Cloud Gateway的动...原创 2018-11-29 00:50:21 · 13946 阅读 · 4 评论 -
Eureka的限流算法类RateLimiter源码解读
Eureka的限流算法类RateLimiter是基于令牌桶算法来实现的,下面看一看令牌桶算法的原理:对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。如图所示,令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。源码解读:p原创 2017-07-06 11:36:04 · 6459 阅读 · 0 评论 -
使用spring boot admin监控spring cloud应用程序
最近在找一个spring cloud的监控组件,要求粒度要到每一个接口的,hystrix dashboard显然不适合,也不是这个应用场景。后来发现了spring boot admin这个神器,可以注册到Eureka和spring cloud无缝整合,页面AngularJS写的还算凑合,里面包含有许多功能:显示 name/id 和版本号显示在线状态Logging日志级别管理JMX beans管理Th原创 2017-06-12 15:21:29 · 28261 阅读 · 2 评论 -
Feign报错:Attribute 'value' in annotation,must be declared as an @AliasFor [serviceId], not [name]
今天在Feign搭建中想追下新,把1.3.5.RELEASE版本改成了1.4.0.RELEASE版本,然后就莫名其妙报这个错了,这么解决都莫法。。。完整报错:org.springframework.core.annotation.AnnotationConfigurationException: Attribute ‘value’ in annotation [org.springframework原创 2017-03-19 23:52:34 · 12265 阅读 · 0 评论 -
java.lang.NoClassDefFoundError: feign/Logger
找不到类,明显是少包,少依赖。。。。添加spring-cloud-starter-feign 的依赖坐标。。。解决原创 2017-03-21 22:59:32 · 15924 阅读 · 1 评论 -
Spring Cloud 组件搭建(一)Eureka服务发现
Spring Cloud生态圈目前有21个子项目来共同构建,解决了目前微服务系统的很多问题,废话不多说,直接上其最普通简单的Eureka服务发现与注册中心搭建过程。本系列教材依照1.3.5.RELEASE版本,该版本比较稳定,JDK要求1.7以上。1、micro-service父工程pom.xml:<?xml version="1.0" encoding="UTF-8"?><project xml原创 2017-03-22 22:25:16 · 15726 阅读 · 2 评论 -
如何将单体应用改造为微服务
如果你的工作围绕一个大型的,复杂的单体应用,可能你每天开发和部署应用的工作都是进展缓慢而痛苦的。微服务看起来像是一个遥不可及的天堂,幸运的是,有方法可以帮助你逃离单体架构的地狱。本文将会介绍如何逐步地将单体应用改造为一系列的微服务。概述将单体应用改造为微服务实际上是应用现代化的过程,这是开发者们在过去十年来一直在做的事情,所以已经有一些可以复用的经验。全部重写是绝对不能用的策略,除非你要集中精力从转载 2017-03-14 15:09:34 · 15142 阅读 · 1 评论 -
Eureka Server的高可用
Eureka Server进行互相注册的方式来实现高可用的部署,所以我们只需要将Eureke Server配置其他可用的serviceUrl就能实现高可用部署创建application-peer1.properties,作为peer1服务中心的配置,并将serviceUrl指向peer2spring.application.name=eureka-serverserver.port=1111eu转载 2017-03-14 21:52:25 · 3070 阅读 · 1 评论 -
com.netflix.zuul.exception.zuulexception timeout
zuul部署上物理机之后,如果使用默认配置,请求很容易超时,错误信息:java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInpu原创 2017-04-10 11:39:30 · 39243 阅读 · 2 评论 -
3017.3.12---Spring Cloud中国社区线下meetup笔记
地点:电子科技大学清水河校区空天院报告厅Eureka优势:基于Java实现,和Java后端代码兼容性强。定制开发易于Java程序员掌握。出于Netflix,与Netflix其他组件如Ribbon、Hystrix、Zuul具有先天良好适配性。不足:需要在每个服务添加Eureka客户端。心跳包机制,导致服务状态更新不及时。Consul优势:服务注册独立于服务本身。主动检测服务本身。通原创 2017-03-15 15:21:53 · 7626 阅读 · 0 评论 -
分布式服务化系统一致性(分布式事务、ACID、BASE、CAP)原理与解决方案
1、背景 一致性是一个抽象的、具有多重含义的计算机术语,在不同应用场景下,有不同的定义和含义。在传统的IT时代,一致性通常指强一致性,强一致性通常体现在你中有我、我中有你、浑然一体;而在互联网时代,一致性的含义远远超出了它原有的含义,在我们讨论互联网时代的一致性之前,我们先了解一下互联网时代的特点,互联网时代信息量巨大、需要计算能力巨大,不但对用户响应速度要求快,而且吞吐量指标也要向外扩展(既:转载 2017-04-18 09:41:41 · 24577 阅读 · 0 评论 -
为什么spring cloud服务启动之后回到命令行会自动挂掉
使用nohup命令就不会了! 例:jar包:micro-service/micro-eureka-server-0.0.1-SNAPSHOT.jar启动命令:nohup java -jar micro-service/micro-eureka-server-0.0.1-SNAPSHOT.jar &启动之后用 ctrl+c 回到命令行就不会挂掉了,想要看看启动起来没有可以查看进程:ps -ef |原创 2017-04-14 23:09:55 · 10072 阅读 · 0 评论 -
如何解决Eureka Server不剔除已关停的节点的问题?
背景:由于Eureka拥有自我保护机制,当其注册表里服务因为网络或其他原因出现故障而关停时,Eureka不会剔除服务注册,而是等待其修复。这是AP的一种实现。 为了让其有精准的 CP健康检查,可以采取让其剔除不健康节点。server端:eureka.server.enable-self-preservation//(设为false,关闭自我保护主要)eureka.server.evict原创 2017-05-01 09:52:30 · 27910 阅读 · 6 评论 -
Eureka注册服务列表显示ip+端口
Eureka服务注册列表默认是显示主机名+端口,要想更方便地知道是哪台主机就需要查看ip+端口。client端配置:eureka: instance: preferIpAddress: true instance-id: ${spring.cloud.client.ipAddress}:${server.port}效果:原创 2017-05-01 10:10:01 · 25274 阅读 · 6 评论 -
什么是分布式系统中的幂等性
现如今我们的系统大多拆分为分布式SOA,或者微服务,一套系统中包含了多个子系统服务,而一个子系统服务往往会去调用另一个服务,而服务调用服务无非就是使用RPC通信或者restful,既然是通信,那么就有可能再服务器处理完毕后返回结果的时候挂掉,这个时候用户端发现很久没有反应,那么就会多次点击按钮,这样请求有多次,那么处理数据的结果是否要统一呢?那是肯定的!尤其再支付场景。幂等性:就是用户对于同一操作发转载 2017-05-02 15:36:38 · 20911 阅读 · 2 评论 -
分布式系统的接口幂等性设计
概念幂等性, Idempotence, 这个词来源自数学领域, 百科 上一元运算的幂等性解释如下: > 设 f 为一由 {x} 映射至 {x} 的一元运算, 则 f 为幂等的, 当对于所有在 {x} 内的 x: > f(f(x)) = f(x) > 特别的是,恒等函数一定是幂等的,且任一常数函数也都是幂等的。幂等性衍生到软件工程中, 它的语义是指: 函数/接口可以使用相同的参数重复执行, 不应该影响转载 2017-05-02 18:00:22 · 17007 阅读 · 5 评论 -
Swagger-UI与Spring Cloud整合与安全设置
swagger ui是一个API在线文档生成和测试的利器,在某种程度上可以媲美常用的postman,网上有很多它的整合教程,但是没有考虑到安全问题,下面是它的整合流程。1、maven依赖: <!-- Swagger --> <dependency> <groupId>io.springfox</groupId> <artifact原创 2017-05-23 14:38:35 · 19355 阅读 · 8 评论 -
如何实现Spring Cloud微服务挂掉之后自动重启
微服务迟早是要部署在Linux系统上的,当网络不稳定就会挂掉,但是挂掉后手动去重启是十分麻烦的,下面就以Eureka为例配合shell脚本来实现自动重启。1、启动一台Eureka:20984 20490 99 17:57 pts/0 00:00:25 java -jar /usr/local/server/micro-service/micro-eureka-server-0.0.1-SNAP原创 2017-04-14 18:25:21 · 19039 阅读 · 0 评论 -
一种接口限速方案
如果一个接口的频繁调用会严重影响到系统稳定性的话,那就要考虑限速了。谷歌有个现有的开源实现:Guava的RateLimiter类,RateLimiter使用的是一种叫令牌桶的流控算法,RateLimiter会按照一定的频率往桶里扔令牌,线程拿到令牌才能执行,比如你希望自己的应用程序QPS不要超过1000,那么RateLimiter设置1000的速率后,就会每秒往桶里扔1000个令牌。 详情请戳:G原创 2017-06-07 14:56:01 · 10736 阅读 · 0 评论 -
基于Spring Boot、Spring Cloud、Docker的微服务系统架构实践
原文/项目 地址:https://github.com/sqshq/PiggyMetrics由于最近公司业务需要,需要基于Spring Cloud的微服务系统。遍访各大搜索引擎,发现国内资料少之又少,也难怪,国内Dubbo正统治着天下。但是,一个技术总有它的瓶颈,Dubbo也有它捉襟见肘的地方。所幸霸主Spring也推出了一整套微服务解决方案,各个子项目也巧妙地解决了分布式系统开发过程中的各种各样的翻译 2017-03-07 23:39:02 · 71505 阅读 · 23 评论