微服务SpringBoot/Cloud
文章平均质量分 71
hashcon
做自媒体技术分享很久了,大家的抬爱与支持让我很开心很感激,但是个人本来做这些也并不是为了收益,只是为了个人学习与传播知识帮助更多的人,所以我将全网所有账号全部收益,持续捐给各种公益项目,也算不辜负大家的抬爱,也是回报祖国对我的一番培养。
曾任职于顺丰,华为,网易等公司,从Java小白,成长为资深开发与项目组首席架构师。喜欢源码与开源,曾贡献 MyCat1.6 核心源码,贡献过druid,Spring Cloud,dubbox,Apache RocketMQ,Apache Bookeeper 等多开源项目。
展开
-
【硬核】Log4j2 与 Logback 当初的选型以及在当前云原生环境下的反思与展望
log4j2.xml配置:关闭输出代码位置(RingBuffer 满了的策略,以及增加对于 RingBuffer 的 metric 监控与暂时下线的机制通过批量 flush 进一步提高吞吐量(配置 Disruptor 的等待策略为 SLEEP,但是最好能将其中的 Thread.yield 修改为 Thread.onSpinWait (这个修改仅针对 x86 机器部署)原创 2024-02-20 20:15:54 · 638 阅读 · 0 评论 -
CompletableFuture与Spring的Sleuth结合工具类
本文基于JDK 11 and JDK 12按照上一篇内容的分析,我们想在异步代码保留原有的spanId和traceId需要在异步调用前,使用:Span span = tracer.currentSpan();try (Tracer.SpanInScope cleared = tracer.withSpanInScope(span)) { //执行异步代码}每次使用Compl...原创 2019-11-13 17:22:59 · 15946 阅读 · 1 评论 -
Spring WebFlux运用中的思考与对比
本文基于Spring Cloud Finchley SR4本文通过几个问题,解析下Spring WebFlux用法最佳实践,并与另一框架Vertx作对比1. 是否一定要用默认的Web容器,用自己的Web容器是否可以,同时是否可以有web和webflux是可以的,这样的依赖是可行的(容器用tomcat和undertow或者其他都可以,这里使用undertow):2. 怎样实现真正的异步背...原创 2019-11-12 17:55:57 · 19374 阅读 · 1 评论 -
Spring Cloud Ribbon 全解 (8) - SpringCloud环境下Ribbon+Eureka配置
本文基于SpringCloud-Dalston.SR5一般SpringCloud环境下是Ribbon+Eureka一起使用的:SpringCloud环境下Ribbon+Eureka配置示例项目实例项目地址:https://github.com/HashZhang/ScanfoldAll/tree/master/Scanfold-SpringCloud/Scanfold-Sp...原创 2018-05-16 11:05:24 · 25217 阅读 · 0 评论 -
Spring Cloud Ribbon 全解 (6) - SpringCloud环境下纯Ribbon(不包含Eureka)使用与启动分析
本文基于SpringCloud-Dalston.SR5前面已经分析了Ribbon各个组件详细的源码,以及整体的流程SpringCloud环境下纯Ribbon(不包含Eureka)使用与启动分析:示例项目以下项目可以参考:https://github.com/HashZhang/ScanfoldAll/tree/master/Scanfold-SpringCloud/Scan...原创 2018-05-16 11:01:48 · 21833 阅读 · 1 评论 -
Spring Cloud Ribbon 全解 (3) - 基本组件实现源码(1)
本文基于SpringCloud-Dalston.SR5上一篇我们了解到Ribbon主要由如下几个组件组成:所有Ribbon负载均衡器需要实现的接口IClient服务实例列表维护机制实现的接口ServerList负载均衡数据记录LoadBalancerStats负责选取Server的接口ILoadBalancer负载均衡选取规则实现的接口IRule检查实例是否存活实现的接口IPi...原创 2018-03-27 19:14:43 · 18767 阅读 · 4 评论 -
Spring Cloud Ribbon 全解 (1) - 总览篇
本文基于SpringCloud-Dalston.SR5Ribbon是一个客户端负载均衡解决方案,简单来说,就是从Eureka获取可用服务实例列表,然后将请求根据某种策略发到这些实例上面执行What is Spring Cloud Netflix?其官方文档中对自己的定义是: Spring Cloud Netflix provides Netflix OSS integrat...原创 2018-03-05 18:11:25 · 27990 阅读 · 0 评论 -
Ribbon的AvailabilityFilteringRule的坑(Spring Cloud Finchley.SR2)
如题,本文基于Spring Cloud Finchley.SR2我们项目配置了AvailabilityFilteringRule作为所有Ribbon调用的负载均衡规则,它有那些坑呢(理解歧义和注意点)?首先来看源码,核心是choose方法:public Server choose(Object key) { int count = 0; //通过轮询选择一个server...原创 2019-04-24 12:04:12 · 20609 阅读 · 2 评论 -
Spring Cloud Finchley OpenFeign的重试配置相关的坑
如题,本文基于Spring Cloud Finchley.SR2OpenFeign的重试OpenFeign配置重试后,逻辑分析对比Daltson和Finchley的基本组件,发现Ribbon还有Hystrix的重试逻辑基本没变,feign编程openfeign之后,增加了个重试逻辑,我们用下面这个图来展示其中的逻辑:首先搞清楚调用链:可以总结如下:OpenFeign有自己的重试...原创 2019-04-24 12:30:53 · 11973 阅读 · 4 评论 -
Spring cloud实现FeignClient指定Zone调用
本文基于Spring Cloud Fincheley SR3背景介绍目前项目多个区域多个集群,这些集群共用同一个Eureka集群。通过设置eureka.instance.metadata-map.zone设置不同实例所属的zone,zone之间不互相调用,只有zone内部调用(其实这里用zone做了集群隔离,实际上集群肯定是跨可用区的,这里的eureka中的zone在我们项目里面并不是可用...原创 2019-06-13 15:52:05 · 19002 阅读 · 8 评论 -
Spring Boot 2.0 + FastJson 1.2.+作为JSON序列化
SpringBoot配置FastJson的时候,报错:java.lang.IllegalArgumentException: Content-Type cannot contain wildcard type '*' at org.springframework.util.Assert.isTrue(Assert.java:116) ~[spring-core-5.0.13.RELEASE.j...原创 2019-06-14 10:12:07 · 1723 阅读 · 0 评论 -
Spring RequestMapping检测路径匹配核心类AntPathMatcher
本文基于Spring 5.0+项目某些页面是通过后台映射的,匹配映射路径时,有那种路径参数匹配。其中一个定义好的路径匹配是:/{corporationName}_{vendorName}/{shopName}_with_{retailer_name}?g={goodsId}当时没有仔细看,其实{goodsId}也应该作为路径参数,可能是前端想要拿到这个id,放在url参数的位置比较容易...原创 2019-08-28 10:48:14 · 1218 阅读 · 0 评论 -
Spring Boot 注解收集 - @SpringBootApplication
从哪个版本引入?从1.2.0这个版本开始引入,在之前的版本,一般的应用都会用到如下两个个类来启动SpringBoot应用:@EnableAutoConfiguration: 启动自动配置,此注释自动载入应用程序所需的所有Bean。包括从classpath的spring.factories文件加载configuration,并初始化bean的操作@ComponentScan:从配置路径中,扫...原创 2019-09-16 20:04:55 · 208 阅读 · 0 评论 -
Spring Cloud Ribbon 全解 (7) - SpringCloud环境下纯Ribbon(不包含Eureka)重试配置
本文基于SpringCloud-Dalston.SR5前面已经分析了Ribbon各个组件详细的源码,以及整体的流程SpringCloud环境下纯Ribbon(不包含Eureka)使用与启动分析:示例项目以下项目可以参考:https://github.com/HashZhang/ScanfoldAll/tree/master/Scanfold-SpringCloud/Scan...原创 2018-05-16 11:03:08 · 7705 阅读 · 3 评论 -
Spring Cloud Ribbon 全解 (5) - 基本组件实现源码(3)
本文基于SpringCloud-Dalston.SR5我们继续分析如下组件:所有Ribbon负载均衡器需要实现的接口IClient服务实例列表维护机制实现的接口ServerList负载均衡数据记录LoadBalancerStats负责选取Server的接口ILoadBalancer负载均衡选取规则实现的接口IRule检查实例是否存活实现的接口IPing服务实例列表更新机制实现...原创 2018-05-08 08:36:34 · 19059 阅读 · 0 评论 -
Spring Cloud Ribbon 全解 (4) - 基本组件实现源码(2)
本文基于SpringCloud-Dalston.SR5我们继续逐个分析所有Ribbon负载均衡器需要实现的接口IClient服务实例列表维护机制实现的接口ServerList负载均衡数据记录LoadBalancerStats负责选取Server的接口ILoadBalancer负载均衡选取规则实现的接口IRule检查实例是否存活实现的接口IPing服务实例列表更新机制实现的接口...原创 2018-05-08 08:34:32 · 18077 阅读 · 0 评论 -
Zuul监控Endpoint过滤
Spring Cloud Actuator有很多监控接口,但是当我们在zuul上面配置了类似于/**的映射后,这些监控接口也会被转发,避免这种情况,加入配置:zuul.ignoredPatterns = /info,/loggers,/metrics,/health,/mappings,/beans,/dump,/heapdump,/env,/configprops,/trace,/loadBala原创 2017-12-21 21:28:25 · 6177 阅读 · 1 评论 -
Ribbon对于SocketTimeOutException重试的坑以及重试代码解析
背景本文基于Spring-Cloud, Daltson SR4微服务一般多实例部署,在发布的时候,我们要做到无感知发布;微服务调用总会通过Ribbon,同时里面会实现一些重试的机制,相关配置是:#最多重试多少台服务器ribbon.MaxAutoRetriesNextServer=2#每台服务器最多重试次数,但是首次调用不包括在内ribbon.MaxAutoRetries=1在发布时,为了适应E原创 2017-12-26 21:00:47 · 25936 阅读 · 18 评论 -
spring feign http客户端连接池配置以及spring zuul http客户端连接池配置解析
背景一般在生产项目中, Feign会使用HTTP连接池而不是默认的Java原生HTTP单路由单长连接;而是使用连接池。Zuul直接使用Ribbon的Http连接池;Feign和网关Zuul的RPC调用,实际上都是HTTP请求。HTTP请求,如果不配置好HTTP连接池参数的话,会影响性能,或者造成堆积阻塞,对于其中一个微服务的调用影响到其他微服务的调用。源代码类比解析本文基于Spring Cloud原创 2017-12-08 16:04:55 · 16078 阅读 · 8 评论 -
Tomcat容器下Zuul网关加解密后的第一次请求出现400错误的问题
问题现象某些前端发来的请求会在前端加密发送到网关,并在网关解密之后发到真正的微服务,并将结果加密返回给前端。 实现网关加密后,发现一次加密请求后,紧接着的非加密GET请求,就会出现400的错误。再发一次相同的GET请求,就会正常,观察后端微服务的收到网关请求的accessLog,发现接收到的请求解析有问题:## 400的请求- - - [04/Jan/2018:19:48:30 +原创 2018-01-05 17:37:32 · 16440 阅读 · 1 评论 -
Spring Cloud Eureka 全解 (1) - 总览篇
本文基于SpringCloud-Dalston.SR5Eureka作为服务注册中心对整个微服务架构起着最核心的整合作用,因此对Eureka还是有很大的必要进行深入研究。Eureka 1.x版本是纯基于servlet的应用。为了与spring cloud结合使用,除了本身eureka代码,还有个粘合模块spring-cloud-netflix-eureka-server。在我们启动Eurek原创 2017-11-15 19:39:39 · 44339 阅读 · 0 评论 -
Spring Cloud Eureka 全解 (2) - 整体流程篇
本文基于SpringCloud-Dalston.SR5之前我们看过这个整体流程图: 接下来我们来仔细分析下这个流程,先不涉及源代码,只说流程服务提供者EurekaClient -> EurekaServer每个服务会生成自己的InstanceInfo: 除了这些,还有两个比较重要的配置 服务过期时间配置:eureka.instance.lease-expirat原创 2017-11-28 19:09:08 · 38083 阅读 · 0 评论 -
Spring Cloud Eureka 全解 (4) - 核心流程-服务与实例列表获取详解
本文基于SpringCloud-Dalston.SR5关于服务与实例列表获取EurekaClient端我们从Ribbon说起:EurekaClient也存在缓存,应用服务实例列表信息在每个EurekaClient服务消费端都有缓存。一般的,Ribbon的LoadBalancer会读取这个缓存,来知道当前有哪些实例可以调用,从而进行负载均衡。这个loadbalancer同样也有缓原创 2018-01-24 16:29:58 · 34340 阅读 · 0 评论 -
Spring Cloud Eureka 全解 (5) - 自我保护机制
本文基于SpringCloud-Dalston.SR5自我保护机制 关闭自我保护机制(默认是打开的):eureka.server.enable-self-preservation=false自我保护机制:默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务原创 2018-01-24 17:07:36 · 62452 阅读 · 6 评论 -
Spring Cloud Eureka 全解 (6) - 一些热门QA
本文基于SpringCloud-Dalston.SR5Eureka服务实例启动时,是否会立刻向EurekaServer注册?是的,立刻会。EurekaClient在每次实例状态发生改变时,有一个Listener:statusChangeListener = new ApplicationInfoManager.StatusChangeListener() { @Ov原创 2018-01-24 17:44:02 · 16049 阅读 · 2 评论 -
Spring Cloud Eureka 全解 (7) - 生产配置最佳实践
本文基于SpringCloud-Dalston.SR5可以实现比较快的服务上下线:EurekaServer配置:#eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上#默认30seureka.server.respons原创 2018-01-24 17:47:46 · 63015 阅读 · 9 评论 -
Spring Cloud Eureka 全解 (8) - 安全配置
本文基于SpringCloud-Dalston.SR5一般的,Eureka在内网服务,我们不会对于外网暴露Eureka端口,所以一般Eureka不做任何验证。假设我们想进一步增强Eureka的安全性,可以结合spring security来简单配置一些安全设置首先在Spring Cloud Eureka Server所在的项目中添加对于spring security的依赖:<...原创 2018-03-26 18:14:21 · 12535 阅读 · 0 评论 -
Spring Cloud Ribbon 全解 (2) - 基本组件简介
本文基于SpringCloud-Dalston.SR5对于一个负载均衡器,就是以用户请求为输入,请求响应为输出的代理模块。 这个模块基本上就是包括一个服务实例列表,根据请求还有负载均衡规则选择一个合适的实例来执行请求并返回响应。 这个服务实例列表,一般包含每个实例基本信息,然后还有,这个实例相关的负载均衡统计信息(例如请求失败多少次,有多少正在处理的请求等等,用于实例过滤和负载均衡...原创 2018-03-27 11:53:12 · 14938 阅读 · 0 评论 -
spring eureka 服务实例实现快速下线快速感知快速刷新配置解析
背景默认的Spring Eureka服务器,服务提供者和服务调用者配置不够灵敏,总是服务提供者在停掉很久之后,服务调用者很长时间并没有感知到变化。或者是服务已经注册上去了,但是服务调用方很长时间还是调用不到,发现不了这个服务。源码解读通过对Spring Eureka源码的研究,发现如下机制(默认配置下): 描述如下:EurekaServer默认有两个缓存,一个是ReadWriteMap,另一个是原创 2017-11-17 14:32:31 · 82960 阅读 · 20 评论