![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码分析
文章平均质量分 93
evasnowind
关注java,分布式开发,微服务
展开
-
soul源码分析总结篇之数据同步
如果没有看之前文章的朋友,请至少先看阅读源码准备与soul基础本文将包括如下内容:soul中数据同步的基本设计思路soul中数据同步各种方式的总结与对比本文内容参考了官方文档 数据同步设计 (这篇必读!!!),以及这篇文章 soul源码解读(十一)-- 数据同步总结基本设计思路首先,soul-admin将各种数据变更同步给soul-bootstrap时,按照我的个人理解,需要做到:高可用例如要考虑断线重连配置修改能立即生效,不必重启服务应提供多种选择,方便不同环境下部署使用原创 2021-02-09 15:06:19 · 601 阅读 · 1 评论 -
soul源码分析(5)Hystrix插件
说明本文代码基于soul 2021.2.8 master分支版本。准备请先阅读soul官方用户文档 -> Hystrix插件,选择器规则详解目标本文将包括如下内容:如何使用Hystrix插件分析soul相关源码如何使用Hystrix?这一点官方文档写的很清楚,要在soul中使用Hystrix插件,需要:在soul-admin中:插件管理 -> hystrix,设置为开启。插件管理 -> hystrix 中添加selector、rule,此处务必阅读官方文档原创 2021-02-09 13:45:51 · 299 阅读 · 0 评论 -
soul源码分析(4)divide插件如何实现负载均衡与探活
说明本文代码基于soul 2021.2.4 master分支版本。准备请先阅读soul官方用户文档 -> HTTP代理, 并事先使用过divide插件,阅读过divide插件源码,源码分析可以参考我之前写过的文章:soul源码分析(1)http插件的使用与soul插件工作流程分析目标本文将包括如下内容:divide插件如何实现负载均衡divide插件如何实现端口探活divide插件如何实现负载均衡?看过的divide插件源码的童鞋知道,该插件主要逻辑在DividePlugin中:原创 2021-02-08 17:39:05 · 220 阅读 · 0 评论 -
soul源码分析数据同步篇之HTTP长轮询同步流程
说明本文代码基于soul 2021.2.4 master分支版本。准备请先阅读soul官方文档 数据同步原理,对soul数据同步原理有个基本的了解。如何开启HTTP同步策略这个小节主要引自soul官网 使用不同的数据同步策略soul-admin的配置application.yml中添加如下配置,或是在启动参数中添加--soul.sync.http='',然后重启服务:soul: sync: http: enabled: truesoul-bootstrap的原创 2021-02-08 15:58:21 · 321 阅读 · 0 评论 -
soul源码分析数据同步篇之zookeeper同步流程
说明本文代码基于soul 2021.2.4 master分支版本。准备请先阅读soul官方文档 数据同步原理,对soul数据同步原理有个基本的了解。如何开启zookeeper同步策略soul-admin的配置application.yml中添加如下配置,或是在启动参数中添加--soul.sync.zookeeper.url=你的zk地址,然后重启服务:soul: sync: zookeeper: url: localhost:2181 session原创 2021-02-06 15:32:53 · 211 阅读 · 0 评论 -
soul源码分析数据同步篇之WebSocket同步流程
说明本文代码基于soul 2021.1.27 版本。准备请先阅读soul官方文档 数据同步原理,对soul数据同步原理有个基本的了解。WebSocket同步流程1. soul-bootstrap WebSocket客户端处理逻辑soul-admin启动日志有关WebSocket的就一句:2021-01-27 19:54:29.694 INFO 30448 --- [0.0-9095-exec-1] o.d.s.a.l.WebSocket.WebSocketCollector : WebS原创 2021-01-28 13:33:13 · 241 阅读 · 0 评论 -
soul源码分析(3)SpringCloud服务如何接入soul以及SpringCloud插件分析
soul源码分析(3)SpringCloud服务如何接入soul以及SpringCloud插件分析说明本文将包括如下内容:如何将SpringCloud服务接入soulsoul的SpringCloud插件源码分析本文将以2021.1.25的soul源码进行分析。1. 如何将SpringCloud服务接入soul1.1 配置soul网关、soul-admin(1)启动soul-admin后台,操作步骤可以参考本系列第一篇文章阅读源码准备与soul基础(2)在soul-admin后台原创 2021-01-27 17:55:51 · 247 阅读 · 0 评论 -
soul源码分析(2)dubbo服务如何接入soul以及dubbo插件分析
说明本文将包括如下内容:如何将dubbo服务接入soulsoul的dubbo插件源码分析以soul2021.1.25代码做分析。apache dubbo与alibaba dubbo类似,本文只会分析apache dubbo。1. 如何将dubbo服务接入soul1.1 配置soul网关、soul-admin(1)启动soul-admin后台,操作步骤可以参考本系列第一篇文章阅读源码准备与soul基础(2)在soul-admin后台将dubbo插件打开路径:System Ma原创 2021-01-26 16:49:01 · 430 阅读 · 0 评论 -
soul源码分析总结篇之插件化设计
soul源码分析总结篇之插件化设计说明如果没有看之前文章的朋友,请至少先看阅读源码准备与soul基础本文将包括如下内容:soul用插件实现了哪些功能?soul如何实现插件化设计?Soul用插件实现了哪些功能?插件是Soul的灵魂。从架构图上就可以看出,soul主要功能都是通过插件来实现的,比如监控、各种请求的转发(HTTP、Dubbo、SpringCloud、Sofa等)、限流与熔断、WAF等等,用户也可以自定义插件来扩展soul。截止到2021.1.26,目前支持的插件如下(参原创 2021-01-26 15:04:41 · 378 阅读 · 0 评论 -
soul源码分析(1)http插件的使用与soul插件工作流程分析
目标演示soul网关HTTP插件的使用分析soul插件的整体工作流程,1. HTTP插件的使用1.1 在soul-bootstrap项目中引入如下插件,然后重新启动soul网关,启动步骤参见 soul源码分析_0_阅读源码准备与soul基础 <!--if you use http proxy start this--> <dependency> <groupId>org.dromara</groupId> &l原创 2021-01-22 19:45:19 · 363 阅读 · 1 评论 -
源码分析之JDBC实现原理与SPI机制
JDBC实现原理与SPI机制JDBC实现原理分析JDBC常见的代码一般是这么写:String url = "jdbc:mysql:///consult?serverTimezone=UTC";String user = "root";String password = "root";Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection(url, user, pass原创 2021-01-22 15:47:59 · 324 阅读 · 0 评论 -
源码分析之Spring Cloud Gateway中actuator是如何工作的?
本文目标预计介绍如下内容:在SCG中如何使用actuator?SCG中的actuator能做什么?在代码层面上,SCG如何实现actuator?如何基于SCG的actuator进行监控?1、在SCG中如何使用actuator?参见 https://docs.spring.io/spring-cloud-gateway/docs/2.2.5.RELEASE/reference/html/#actuator-api只需要在配置中开启如下配置(以properties配置方式为例,YAML方式属原创 2021-01-22 15:40:24 · 849 阅读 · 0 评论 -
soul源码分析(0)阅读源码准备与soul基础
soul源码分析(0)阅读源码的准备与预备知识目标fork代码本地编译成功启动网关soul基础fork代码github fork到自己的repo,然后在本地:git clone https://github.com/evasnowind/soulcd soulgit branch --set-upstream-to=origin/master由于目前master分支在不断迭代、开发中,个人建议可以先拉取一个稳定的版本,方便阅读。git fetch origin 2.2.1:原创 2021-01-21 15:23:09 · 340 阅读 · 1 评论 -
源码分析之Spring Cloud Gateway中filter是如何工作的
简单起见,直接使用Spring Cloud Gateway(以下简称SCG)框架自带的spring-cloud-gateway-sample模块进行源码分析。目标分析如何添加filter,filter如何排序,filter如何执行事先准备参见源码分析之spring_cloud_gateway中请求被路由的过程解析 中的“准备工作”部分。分析过程SCG如何添加一个filter我们回到最开始,本文示例代码中添加filter的代码如下: @Bean public RouteLocator myR原创 2021-01-22 15:36:56 · 261 阅读 · 0 评论 -
源码分析之Spring Cloud Gateway中请求被处理的全过程解析
简单起见,直接使用Spring Cloud Gateway(以下简称SCG)框架自带的spring-cloud-gateway-sample模块进行源码分析。目标走一遍一个请求在SCG中被解析、路由的主流程,了解整体框架。各种细节部分会留到后面再写文章解析。准备工作可以做如下改造:1、修改yaml文件test.uri的值修改为:http://httpbin.org:80即test: # hostport: httpbin.org:80 # hostport: localhost原创 2021-01-22 15:33:51 · 1303 阅读 · 0 评论 -
spring cloud gateway基础
spring cloud gateway(后续简称SCG)本身就是spring cloud体系的一员,在对于java技术栈的系统使用起来比较方便,此外,SCG扩展性比较好,适合作为业务网关的基础、根据自身需求进行二次开发。关键组成部分谓词 predicate: 将请求匹配到对应的route上路由 route: 网关的基本构建块。它由ID,目标URI,谓词集合和过滤器集合定义过滤器 filter: 由特定工厂构造生成工作过程SCG接收客户端请求。请求与谓词匹配,获得对应的路原创 2020-12-28 20:00:23 · 211 阅读 · 0 评论 -
源码分析之RocketMQ发送消息与接收消息
说明本文主要是本人学习、整理的笔记,涉及的内容可能来自网上,我会尽量注明来源。我本人阅读的rocketmq代码版本为4.7.1。producer发送消息有关producer生产消息,之前参考极客时间 消息队列高手课,写过一篇学习笔记,参考这里源码分析之RocketMQ Producer生产消息的实现及其设计模式分析此处再给出一些参考图片与资料producer发送消息总体过程此图来自:http://www.iocoder.cn/RocketMQ/message-send-and-receive原创 2020-10-13 20:08:40 · 569 阅读 · 0 评论 -
源码分析之Eureka服务端源码解析
文章目录说明eureka server基本功能启动eureka-server注册相关bean开启eureka server开启注册注册表管理核心类 InstanceRegistrycom.netflix.eureka.registry.InstanceRegistry是euraka server中注册表管理的核心接口。职责是在内存中管理注册到Eureka Server中的服务实例信息。实现类有PeerAwareInstanceRegistryImpl。服务注册接收服务心跳请求服务剔除剔除的限制剔除服务的定时原创 2020-09-29 17:52:25 · 547 阅读 · 0 评论 -
源码分析之Eureka客户端源码解析
文章目录说明预备知识一些注解的说明@ConfigurationProperties("eureka.instance")@ConditionalOnBean/@ConditionalOnClass@ImplementedBy@Singletoneureka架构eureka客户端源码eureka客户端工作流程DiscoverClientDiscoveryClient构造方法小结拉取注册表过程全量拉取 getAndStoreFullRegistry()增量拉取getAndUpdateDelta(applicat原创 2020-09-22 16:42:34 · 303 阅读 · 0 评论 -
源码分析之Java线程池ThreadPoolExecutor
文章目录0. 源码注释中的关键点1. 常用变量的解释2. 构造方法3. 提交执行task的过程4. addworker源码解析5. 线程池worker任务单元6. 核心线程执行逻辑-runworker参考资料我个人觉得,学习源码的姿势,首先是需要知道想学习的框架/工具如何使用,然后接下来再去看源码注释,看看当时代码作者是如何阐述代码的,再去看代码怎么编写,效果才最佳。同样的,接下来要分析的线程池,首先用途自不必说,不管有没有用过,ThreadPoolExecutor的运行机制、传说中的7个参数(核心线程原创 2020-09-21 20:48:11 · 97 阅读 · 0 评论 -
源码分析之Spring Boot如何利用Spring Factories机制进行自动注入
前言本文所涉及spring/spring boot代码,请参考spring boot 2.2.6对应版本。我们在刚学习spring boot时,有没有一个困惑:spring boot能够自动实例化很多第三方的依赖库?比如eureka、druid等。这个就涉及到spring boot的扩展机制spring factories。简单来将,spring factories类似与Java SPI机制,利用该机制,我们能够自定义实现一些SDK或是spring boot starter,其实例化过程由我们来实现,原创 2020-09-17 16:42:00 · 1306 阅读 · 0 评论 -
源码分析之Kafka Consumer消费消息的过程
源码分析之Kafka Consumer消费消息的过程文章目录源码分析之Kafka Consumer消费消息的过程说明Consumer如何使用?代码示例主要流程订阅主题的过程是如何实现的?经典思路:主动检测不支持的情况并抛出异常,避免系统产生不可预期的行为有关元数据更新拉取消息的过程是如何实现的?updateAssignmentMetadataIfNeeded() 更新元数据Coordinator#poll() 维持心跳,更新元数据ConsumerNetworkClient#poll() 封装所有网络通信原创 2020-09-11 14:58:01 · 1019 阅读 · 0 评论 -
源码分析之RocketMQ Producer生产消息的实现及其设计模式分析
说明本文所涉及的RocketMQ版本为4.7.1。类关系RocketMQ Producer的核心类、接口关系如下:引自:极客时间-消息队列高手课 https://time.geekbang.org/column/article/132889此处的设计使用了门面模式(Facade Pattern),接口 MQProducer 就是这个模式中的门面。类 DefaultMQProducer 实现了接口 MQProducer,它里面的方法实现大多没有任何的业务逻辑,只是封装了对其他实现类的方法调用;原创 2020-09-10 10:58:55 · 569 阅读 · 0 评论 -
源码分析之Netty线程模型
不得不说的Reactor模式提到Netty,就必须先说一下Reactor模式,源头应该是Doug Lea大神(学java的如果不知道这位神的请自己反思一下……)的Scalable IO in Java所提出的Multiple Reactors模式,参见下图如果想知道为何出现Reactor模式,需要将IO发展过程,都说一下可能才会比较清晰,此处就不一一展开,有兴趣的童鞋可以参考这篇帖子:Reactor模式那么,什么是Reactor模式呢?Reactor模式是事件驱动模型,有一个或多个并发输入源,有原创 2020-09-09 10:47:15 · 137 阅读 · 0 评论 -
Guava RateLimiter 源码分析
Guava RateLimiter基本使用学东西时我们应该尽量去看官网、看源码、看官方给出的单元测试。比如Guava RateLimiter,从RateLimiter类的源码注释中可以看到,官方给出的典型应用场景与使用:As an example, imagine that we have a list of tasks to execute, but we don't want to submit more than 2 per second: final RateLimiter rateLi原创 2020-09-02 16:31:08 · 135 阅读 · 0 评论 -
tomcat和dubbo对于JDK线程池的修改
文章目录预备知识概述Tomcat线程池源码分析ThreadPoolExecutorTaskQueueDubbo线程池源码分析参考资料预备知识计算任务的分类CPU密集型:需要线程长时间进行的复杂的运算,这种类型的任务需要少创建线程,过多的线程将会频繁引起上文切换,降低任务处理处理速度。IO密集型:由于线程并不是一直在运行,可能大部分时间在等待 IO 读取/写入数据,增加线程数量可以提高并发度,尽可能多处理任务。JDK线程池,java.util.concurrent.ThreadPoolE原创 2020-08-18 16:16:32 · 480 阅读 · 0 评论