SpringBoot&Cloud
文章平均质量分 94
奋斗吧_攻城狮
JUST DO IT!
展开
-
面试题:Spring 为何需要三级缓存解决循环依赖,而不是二级缓存?
前言 bean生命周期 三级缓存解决循环依赖 总结 前言在使用spring框架的日常开发中,bean之间的循环依赖太频繁了,spring已经帮我们去解决循环依赖问题,对我们开发者来说是无感知的,下面具体分析一下spring是如何解决bean之间循环依赖,为什么要使用到三级缓存,而不是二级缓存bean生命周期首先大家需要了解一下bean在spring中的生命周期,bean在spring的加载流程,才能够更加清晰知道spring是如何解决循环依赖的我们在sp..转载 2021-08-18 22:12:06 · 190 阅读 · 0 评论 -
Ribbon原理解析
一. 核心接口ILoadBalancerRibbon通过ILoadBalancer接口对外提供统一的选择服务器(Server)的功能,此接口会根据不同的负载均衡策略(IRule)选择合适的Server返回给使用者。其核心方法如下:public interface ILoadBalancer { public void addServers(List<Server> newServers); public Server chooseServer(Object key);转载 2021-08-16 16:49:22 · 2420 阅读 · 0 评论 -
@FeignClient的代理创建和调用过程
1、动态代理的创建过程前面分析过@EnablefeignClient会引入FeignClientsRegistrar,将@FeignClient注解的类以FeignClientFactoryBean的形式往BeanFactory注入BeanDefinition。Spring refresh生命周期的最后一步会将所有单例非懒加载的BeanDefinition执行getBean操作。所以我们需要关注FeignClientFactoryBean#getObejct方法,返回的对象。为了方便分析,以下面的F转载 2021-08-16 15:33:02 · 1263 阅读 · 0 评论 -
hystrix中RequestContextHolder取值为空的问题
我们知道,Hystrix有隔离策略:THREAD以及SEMAPHORE。如果你不知道Hystrix的隔离策略,可以阅读我的书籍《Spring Cloud与Docker微服务架构实战》,或者参考文档:https://github.com/Netflix/Hystrix/wiki/Configuration#executionisolationstrategy引子当隔离策略为THREAD时,是没办法拿到ThreadLocal中的值的。举个例子,使用Feign调用某个远程API,这个远...转载 2021-08-06 10:19:55 · 870 阅读 · 1 评论 -
详解Eureka 缓存机制
引言Eureka是Netflix开源的、用于实现服务注册和发现的服务。Spring Cloud Eureka基于Eureka进行二次封装,增加了更人性化的UI,使用更为方便。但是由于Eureka本身存在较多缓存,服务状态更新滞后,最常见的状况是:服务下线后状态没有及时更新,服务消费者调用到已下线的服务导致请求失败。本文基于Spring Cloud Eureka 1.4.4.RELEASE,在默认region和zone的前提下,介绍Eureka的缓存机制。一、AP特性从CAP理论看,Eureka是转载 2020-07-15 18:42:49 · 1042 阅读 · 0 评论 -
Eureka工作原理
Eureka 工作原理上节内容为大家介绍了,注册中心 Eureka 产品的使用,以及如何利用 Eureka 搭建单台和集群的注册中心。这节课我们来继续学习 Eureka,了解它的相关概念、工作流程机制等。Eureka 作为 Spring Cloud 体系中最核心、默认的注册中心组件,研究它的运行机制,有助于我们在工作中更好地使用它。Eureka 核心概念回到上节的服务注册调用示意图,服务提供者和服务的消费者,本质上也是 Eureka Client 角色。整体上可以分为两个主体:Eureka Serv转载 2020-07-15 11:52:38 · 120 阅读 · 0 评论 -
深入SpringBoot注解原理及使用
SpringBoot的主配置类@SpringBootApplicationpublic class StartEurekaApplication{ public static void main(String[] args) { SpringApplication.run(StartEurekaApplication.class, args); }}点进@SpringBootApplication来看,发现@SpringBootApplication是一个转载 2020-06-16 14:27:59 · 380 阅读 · 0 评论 -
Transactional失效场景介绍
Transactional失效场景介绍第一种 非public方法Transactional注解标注方法修饰符为非public时,@Transactional注解将会不起作用。例如以下代码。定义一个错误的@Transactional标注实现,修饰一个默认访问符的方法/** * @author zhoujy * @date 2018年12月06日 **/@Componentpublic class TestServiceImpl { @Resource TestMapper转载 2020-06-11 20:35:56 · 512 阅读 · 0 评论 -
Ribbon过滤器
前言本文将描述Ribbon在进行Server过滤的一个重要基础组件:AbstractServerPredicate,它的作用就是在众多Server的列表中,通过一定的过滤策略,T除不合格的Server,留下来合格的Server列表,进而供以选择。负载均衡策略的核心之一就是对已知的服务列表进行过滤,留下一堆合格的Server进而按照一定规则进行choose选择,因此本文内容非常重要,内容非常重要,非常重要。正文PredicateKey一个POJO,还有两个属性:Object loadBalan转载 2020-05-11 19:34:48 · 519 阅读 · 0 评论 -
HystrixRequestContext实现Request级别的上下文
一、简介在微服务架构中,我们会有这样的需求,A服务调用B服务,B服务调用C服务,ABC服务都需要用到当前用户上下文信息(userId、orgId等),那么如何实现呢?方案一:拦截器加上ThreadLocal实现,但是如果在这次请求中创建了一个新的线程就拿不到了,也就是无法跨线程传递数据。方案二:使用拦截器加上HystrixRequestContext这个 request level 的 context实现,即保存到HystrixRequestContext中的数据在整个请求中都能访问。二...转载 2020-05-11 14:34:28 · 452 阅读 · 0 评论 -
Spring Cloud各组件超时总结
Ribbon的超时全局设置:ribbon: ReadTimeout: 60000 ConnectTimeout: 60000局部设置:service-id: ribbon: ReadTimeout: 1000 ConnectTimeout: 1000其中,service-id是Ribbon所使用的虚拟主机名,一般和Eureka Serv...转载 2020-03-30 12:09:08 · 167 阅读 · 0 评论 -
Spring Cloud各组件重试总结
Spring Cloud中的重试机制应该说是比较混乱的,不同的版本有一定区别,实现也不大一样,好在Spring Cloud Camden之后已经基本稳定下来,Dalston中又进行了一些改进,详情暂且不表。下面我们来详细探讨。笔者使用的版本是Spring Cloud Dalston SR4,同样适应于Edgware以及更高版本,对于Dalston此前的版本,本文不做讨论,大家可自行...转载 2020-03-30 11:54:29 · 139 阅读 · 0 评论