从去年10月开始项目较忙,感觉大部分时间都是在做一些小的 trick,补一些遗漏的知识点或者说工具点而已。很少能有机会做一些有意思的钻进去的东西,其实在备选 topic 里面已经储备了好多要看的东西,也许4月份开始能有时间腾出来解决这些问题。
全局唯一自增 ID 生成方案
需求
微服务还是模块化
今天看了 Sander Mak 关于微服务和模块化的视频,里面有些论点非常有趣,总结一下,方便不想看55分钟视频的人。
OKHttp 的 interceptor 实现
一直对于责任链模式具体如何实现没有一个很好的实践,最近刚好用 OKHttp mock 的时候发现它是用 Interceptor 实现的,而 Interceptor 的调用上看起来也是责任链模式的,可以钻进去看看。
使用 Storm 输出至 ElasticSearch
其实最大的坑就是storm官方提供的Bolt已经没法用了,就是这玩意儿https://github.com/apache/storm/tree/master/external/storm-elasticsearch。里面的RestClient已经和最新的ES6不兼容了,所以不用去折腾这个库了。
Spring Cloud Eureka Server 源码解析
了解Eureka Server的启动,服务注册,心跳维持和节点同步的工作机制。
使用代码更新 Log4j2 的日志配置
最近有一个业务需求,需要提取业务日志数据进行运营分析。由于之前各个应用对于业务数据本来打印的就少,所以想借此机会,提供一个接口来实现业务数据的专用日志,与一般的运维日志消息区分开来。
为 git 库配置多个 remote
当存在多个远端库需要同步时,可以为本地库配置多个 remote,每次 push 或者 pull 的时候指定来源。
Feign Client 配置
在分析 Feign 源码的时候,我们看到 Feign 构建代理对象是分了几层的,一层是选择 Builder,Feign.Builder 或者是它的子类 HystrixFeign.Builder;接下来两个 Builder 会选择不同的动态代理类创建逻辑,一个是 ReflectiveFeign.FeignInvocationHandler 或者是 HystrixInvocationHandler。两者的区别主要是直接用 SynchronousMethodHandler 的 invoke 方法,或者是将 invoke 混合起来做成 HystrixMethod。如果排除掉 fallback 的情况,两者应该是一致的,即 SynchronousMethodHandler 的 invoke。其中 Retry 逻辑是包含在 SynchronousMethodHandler 里面。所以使用了 Feign + Hystrix +Retry 后,整体 client 的包含逻辑是如下图的。