关于FeignClient参数fallbackFactory和fallback
首先两个参数都可以作为断容器使用,在抛出exception时,返回默认的配置数据 其次两个参数不能同时使用 区别:fallbackFactory可以识别到cause,也就是说如果需要得到错误原因,可以使用fallbackFactory,如下 fallbackFactory的使用 FeignClient 123456remote接口标注fallbackFactory,/** * @author 小五 */@FeignClient(contextId = "productFeign", value = ServiceNameConstants.PRODUCT_SERVICE, fallbackFactory = ProductFeignFallbackFactory.class) FeignClient实现类 12345678910111213@Slf4j@Componentpublic class ProductFeignFallbackImpl implements ProductFeign { @Setter ...
openfeign远程调用
Feign远程调用先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: •代码可读性差,编程体验不统一 •参数复杂URL难以维护 Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign 其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。 2.1.Feign替代RestTemplateFegin的使用步骤如下: 1)引入依赖我们在order-service服务的pom文件中引入feign的依赖: 1234<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency> 2)添加注解在order-service的启动类添加注解开启Feign的功能: 3)编写Feign的客户端在o...
关于rpc和http
1234567891011121314151617什么是RPC协议?RPC(Remote Procedure Call)远程过程调用协议是一个用于建立适当框架的协议。从本质上讲,它使一台机器上的程序能够调用另一台机器上的子程序,而不会意识到它是远程的。RPC 是一种软件通信协议,一个程序可以用来向位于网络上另一台计算机的程序请求服务,而不必了解网络的细节。RPC 被用来像本地系统一样调用远程系统上的其他进程。过程调用有时也被称为函数调用或子程序调用。HTTP是一种超文本传输协议。是WWW浏览器和WWW服务器之间的应用层通讯协议。RPC协议与HTTP协议的区别RPC1、RPC是一种API,HTTP是一种无状态的网络协议。RPC可以基于HTTP协议实现,也可以直接在TCP协议上实现。2、RPC主要是用在大型网站里面,因为大型网站里面系统繁多,业务线复杂,而且效率优势非常重要的一块,这个时候RPC的优势就比较明显了。HTTP主要是用在中小型企业里面,业务线没那么繁多的情况下。1、HTTP开发方便简单、直接。开发一个完善的RPC框架难度比较大。2、HTTP发明的初衷是为了传送超文本的资源...
关于springcloud
单体, 微服务, 分布式 1.1.单体架构单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。 单体架构的优缺点如下: 优点: 架构简单 部署成本低 缺点: 耦合度高(维护困难、升级困难) 1.2.分布式架构分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。 分布式架构的优缺点: 优点: 降低服务耦合 有利于服务升级和拓展 缺点: 服务调用关系错综复杂 分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考: 服务拆分的粒度如何界定? 服务之间如何调用? 服务的调用关系如何管理? 人们需要制定一套行之有效的标准来约束分布式架构。 1.3.微服务微服务的架构特征: 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责 自治:团队独立、技术独立、数据独立,独立部署和交付 面向服务:服务提供统一标准的接口,与语言和技术无关 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题 微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服...
学习sentinel
1.初识Sentinel1.1.雪崩问题及解决方案1.1.1.雪崩问题微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被阻塞。此时,其它不依赖于服务I的业务似乎不受影响。 但是,依赖服务I的业务请求被阻塞,用户不会得到响应,则tomcat的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞: 服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,那么当前服务也就不可用了。 那么,依赖于当前服务的其它服务随着时间的推移,最终也都会变的不可用,形成级联失败,雪崩就发生了: 1.1.2.超时处理解决雪崩问题的常见方式有四种: •超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待 1.1.3.仓壁模式方案2:仓壁模式 仓壁模式来源于船舱的设计: 船舱都会被隔板分离为多个独立空间,当船体破损时,只会导致部分空间进入,将故障控制在一定范围内,避免整个船体都被淹没。...
SpringBoot项目启动时初始化操作的6种方式
SpringBoot项目启动时初始化操作的6种方式1、监听容器刷新完成扩展点ApplicationListener<ContextRefreshedEvent>ApplicationContext事件机制是观察者设计模式实现的,通过ApplicationEvent和ApplicationListener这两个接口实现ApplicationContext的事件机制。 Spring中一些内置的事件如下: ContextRefreshedEvent:ApplicationContext 被初始化或刷新时,该事件被发布。这也可以在 ConfigurableApplicationContext接口中使用 refresh() 方法来发生。此处的初始化是指:所有的Bean被成功装载,后处理Bean被检测并激活,所有Singleton Bean 被预实例化,ApplicationContext容器已就绪可用。 ContextStartedEvent:当使用 ConfigurableApplicationContext (ApplicationContext子接口)接口中的 star...
spring5学习
代码地址: https://github.com/behappy-spring-study/spring5_study_source 容器与 bean1) 容器接口 BeanFactory 接口,典型功能有: getBean ApplicationContext 接口,是 BeanFactory 的子接口。它扩展了 BeanFactory 接口的功能,如: 国际化 通配符方式获取一组 Resource 资源 整合 Environment 环境(能通过它获取各种来源的配置信息) 事件发布与监听,实现组件之间的解耦 可以看到,我们课上讲的,都是 BeanFactory 提供的基本功能,ApplicationContext 中的扩展功能都没有用到。 演示1 - BeanFactory 与 ApplicationContext 的区别代码参考com.itheima.a01 包 收获💡通过这个示例结合 debug 查看 ApplicationContext 对象的内部结构,学到: 到底什么是 BeanFactory 它是 ApplicationContext 的父接...
探究spring的底层实现原理1
探究spring的底层实现原理1<谨供参考> 这篇文章我将尝试从以下几个方面配合源码讲解spring的原理,并在下一个篇章手写一个简易版spring的小demo来更透彻的分析spring项目是如何"动"起来的 BeanFactory Bean的整个生命周期 Bean的属性填充 依赖注入 先来看一张图(看不清可以右键打开) 这里需要说的一点是,spring的核心就是AbstractApplicationContext.refresh中的13个方法,关于refresh我会单独写BeanFactory12345678910以springboot项目为例,运行主入口类的SpringApplication.run会走到AbstractApplicationContext.refresh方法,从ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory()到registerListeners()都是在准备并创建BeanFactory的过程,而这个BeanFacto...
探究spring的底层实现原理2
接上一篇[探究spring的底层实现原理1上一篇从理论到源码讲到了以下四点 BeanFactory Bean的整个生命周期 Bean的属性填充 依赖注入 这节就切合上一篇,手写一个简易版spring的小demo,看看我是怎样去实现的java <谨供参考> 应用程序上下文(启动类) 123ClassPathXmlApplicationContext:xml配置文件方式AH8q3dGK2f2vLZVgbRfLTjQPySe2yRaJHs:注解方式SpringApplication:SpringBoot方式 模拟注解方式启动 配置类,指定"spring"需要扫描的限定包路径 123@ComponentScan("org.xiaowu.xiaowu.spring.xiaowu")public class AppConfig {} 标注@Component的类则是需要被spring管理的 12345@Target({ElementType.TYPE})@Retention(Re...
hexo基础seo优化
seo搜索引擎优化(Search Engine Optimization),它是一种通过分析搜索引擎的排名规律,了解各种搜索引擎怎样进行搜索,怎样抓取互联网页面,怎样确定特定关键词的搜索结果排名的技术.Google自动收录效果还不错,百度就差得远了 另外GitHub不允许百度的Spider爬取GitHub上的内容,但我仍会把百度相关部分粘贴出来 修改路径结构 permalink: :year:month:day/:title/ 网站收录谷歌 进入谷歌站长(https://search.google.com/search-console),选择第二个带前缀的 然后选择html标签认证, 将内容粘贴到主题可放置head标签的地方,随后,重新部署博客,再点击验证 百度 首先登陆百度搜索平台(https://ziyuan.baidu.com/site/index),点击**新增网站** 输入自己的网站 验证, 我选择的是html标签,然后在主题文件夹下找到放置head标签的地方,将代码粘贴进去, 然后重新提交. 之后在点击完...
