还是和以往一样,说说最近的工作,最近的工作主要是业务相关的代码。
呼叫中心没有任何的技术含量,所以对我来说。可能处理好框架就编写业务相关的
昨晚说了租户的概念,我发现不管单体项目和集群项目中都有租户的概念
谈谈最近和朋友同事讨论这个概念
第一,使用datasouce的切面完成对某些sql的拦截
第二,采用mybaties-plus的租户,但是这里面有个登录的坑
第三,集群分库和读写分离的实现,如果多线程中有很多读和写,如果第一个是读的话是在从表,但是在本地的第二个sql中又是写的操作。但是一般线程都会封装本地的Threadlocal这个datasouce,就会照成第一个加载的datasouce的从表,而照成datasouce不能添加修改等操作
所以这个地方会采用切换到主库中,对于shardJdbc来说已经意识到这个情况,所以可以采用升级版本来解决这个问题
进入今天的主题,feign的使用
对于feign来是ribbon和hystrix的主要的核心功能
1、可插拔的http客户端
2、编码和解码 比如封装对于的对象中
3、底层还可以修改http请求的框架,如okhttp和netty api
4、可以定义gzip
5、自动的负载均衡
6、自带熔断器
7、自带重试,
8、请求日志详情
可能对于普通人来说都是使用最简单的方式
@feignClent (名字) ,但是在稍微高级一点的用法中,可以加入重试机制
比如采用retryer这个的默认的重试机制底层采用指数1.5的方式来实现的重试机制
还有log的日志,默认情况下是采用的none的方式来显示日志的。不显示日志。
可以采用Logger.level的枚举来定义,定义好了后别忘记了@FeignClent和配置文件中配置
还有可以实现一个接口RequstIntercepter这个类的apply方法的 doc说所有的http请求都会到拦截,实现apply方法就行了。
说完了高级一点的用法,说说源码吧
首先说明入口
@enableFeignClents里面有一个FeignClent的扫描器
当然有一个很关键的东西
扫描这个注解器到ioc中,具体的实现。我们继续跟进源码
1是加载一些主要的配置信息,
2这个是真正的注册
这个是扫描包的方法,最后一个是注册客户端
继续看注册机干嘛了
添加了一个属性,也加入了fallback失败机制的函数
添加了fallbackFactory的一些数据
当然这个里面我可以采用mq的异步来执行失败逻辑,达到最终一致性的概念
注册BeanFfactoryBean,工程Bean里面不仅包含了具体的实现,也添加了写我们之前高级的用法
如Log retryer啊,还有intercepter的注册
同一个类里面采用了一个负载均衡的ribbon的,所以之前说的Feign是封装了ribbon和hystix的
我还没有看到hystrix,所以我明天再来看看hystrix的源码。看hystrix和Feign是如何组装到一起的
ps:之前看到了一个面试题:说如果从写了对象的hash和tostring feign还能不能封装对象。
源码说明,不能。