精尽 Dubbo 原理与源码专栏( 已经完成 69+ 篇,预计总共 75+ 篇 )

分布式专题-分布式服务治理02-Dubbo常用配置 关于Dubbo,本系列文章主要讲三方面内容。上一小节,我们总结了Dubbo的历史背景与简单使用,本节我们主要讲Dubbo的常用配置以及特性,另外也会提到自适应扩展点的Dubbo源码,作为第三节的源码引入~ 阅读详情
  • 只更新在笔者的知识星球,欢迎加入一起讨论 Dubbo 源码与实现。

  • ↓↓↓ 长按下方二维码加入 ↓↓↓

    • ↑↑↑ 长按上方二维码加入

    • 目前已经有 750+ 位球友加入…

    • 进度:已经完成 69+ 篇,预计总共 75+ 篇,完成度 92% 。

  • 对应 Dubbo 版本号:2.6.X

1.1 目录

  • 调试环境搭建

    • 《精尽 Dubbo 源码分析 —— 调试环境搭建》

  • 项目结构一览

    • 《精尽 Dubbo 源码分析 —— 项目结构一览》

  • 配置 Configuration

    • 《精尽 Dubbo 源码解析 —— API 配置(一)之应用》

    • 《精尽 Dubbo 源码解析 —— API 配置(二)之服务提供者》

    • 《精尽 Dubbo 源码解析 —— API 配置(三)之服务消费者》

    • 《精尽 Dubbo 源码分析 —— 属性配置》

    • 《精近 Dubbo 源码解析 —— XML 配置》

  • 核心流程一览

    • 《精近 Dubbo 源码解析 —— 核心流程一览》

  • 拓展机制 SPI

    • 《精尽 Dubbo 源码分析 —— 拓展机制 SPI》

  • 线程池

    • 《精尽 Dubbo 源码分析 —— 线程池》

  • 服务暴露 Export

    • 《精尽 Dubbo 源码分析 —— 服务暴露(一)之本地暴露(Injvm)》

    • 《精尽 Dubbo 源码分析 —— 服务暴露(二)之远程暴露(Dubbo)》

  • 服务引用 Refer

    • 《精尽 Dubbo 源码分析 —— 服务引用(一)之本地引用(Injvm)》

    • 《精尽 Dubbo 源码分析 —— 服务引用(二)之远程引用(Dubbo)》

  • 注册中心 Registry

    • 《精尽 Dubbo 源码分析 —— Zookeeper 客户端》

    • 《精尽 Dubbo 源码分析 —— 注册中心(一)之抽象 API》

    • 《精尽 Dubbo 源码分析 —— 注册中心(二)之 Zookeeper》

    • 《精尽 Dubbo 源码分析 —— 注册中心(三)之 Redis》

    • 《精尽 Dubbo 源码分析 —— 注册中心(四)之 Simple 》

    • 《精尽 Dubbo 源码分析 —— 注册中心(五)之 Multicast 》

  • 动态编译 Compile

    • 《精尽 Dubbo 源码分析 —— 动态编译(一)之 Javassist》

    • 《精尽 Dubbo 源码分析 —— 动态编译(二)之 JDK》

  • 动态代理 Proxy

    • 《精尽 Dubbo 源码分析 —— 动态代理(一)之 Javassist》

    • 《精尽 Dubbo 源码分析 —— 动态代理(二)之 JDK》

    • 《精尽 Dubbo 源码分析 —— 动态代理(三)之本地存根 Stub》

  • 服务调用 Invoke

    • 《精尽 Dubbo 源码分析 —— 服务调用(一)之本地调用(Injvm)》

    • 《精尽 Dubbo 源码解析 —— 服务调用(二)之远程调用(Dubbo)【1】通信实现》

    • 《精尽 Dubbo 源码解析 —— 服务调用(二)之远程调用(Dubbo)【2】同步调用》

    • 《精尽 Dubbo 源码解析 —— 服务调用(二)之远程调用(Dubbo)【3】异步调用》

    • 《精尽 Dubbo 源码解析 —— 服务调用(二)之远程调用(Dubbo)【4】参数回调》

    • 《精尽 Dubbo 源码解析 —— 服务调用(三)之远程调用(HTTP)》

    • 《精尽 Dubbo 源码解析 —— 服务调用(四)之远程调用(Hessian)》

    • 《精尽 Dubbo 源码解析 —— 服务调用(五)之远程调用(Webservice)》

    • 《精尽 Dubbo 源码解析 —— 服务调用(六)之远程调用(REST)》

    • 《精尽 Dubbo 源码解析 —— 服务调用(七)之远程调用(RMI)》

    • 《精尽 Dubbo 源码解析 —— 服务调用(八)之远程调用(Redis)》

    • 《精尽 Dubbo 源码解析 —— 服务调用(九)之远程调用(Memcached)》

    • 《精尽 Dubbo 源码解析 —— 服务调用(十)之远程调用(Thrift)》

  • 调用特性

    • 《精尽 Dubbo 源码解析 —— 调用特性(一)之回音测试》

    • 《精尽 Dubbo 源码解析 —— 调用特性(二)之泛化引用》

    • 《精尽 Dubbo 源码解析 —— 调用特性(三)之泛化实现》

  • 过滤器 Filter

    • 《精尽 Dubbo 源码解析 —— 过滤器(一)之 ClassLoaderFilter》

    • 《精尽 Dubbo 源码解析 —— 过滤器(二)之 ContextFilter》

    • 《精尽 Dubbo 源码解析 —— 过滤器(三)之 AccessLogFilter》

    • 《精尽 Dubbo 源码分析 —— 过滤器(四)之 ActiveLimitFilter && ExecuteLimitFilter》

    • 《精尽 Dubbo 源码分析 —— 过滤器(五)之 TimeoutFilter》

    • 《精尽 Dubbo 源码分析 —— 过滤器(六)之 DeprecatedFilter》

    • 《精尽 Dubbo 源码分析 —— 过滤器(七)之 ExceptionFilter》

    • 《精尽 Dubbo 源码分析 —— 过滤器(八)之 TokenFilter》

    • 《精尽 Dubbo 源码分析 —— 过滤器(九)之 TpsLimitFilter》

    • 《精尽 Dubbo 源码分析 —— 过滤器(十)之 CacheFilter》

    • 《精尽 Dubbo 源码分析 —— 过滤器(十一)之 ValidationFilter》

  • NIO 服务器

    • 《精尽 Dubbo 源码分析 —— NIO 服务器(一)之抽象 API》

    • 《精尽 Dubbo 源码分析 —— NIO 服务器(二)之 Transport 层》

    • 《精尽 Dubbo 源码分析 —— NIO 服务器(三)之 Telnet 层》

    • 《精尽 Dubbo 源码分析 —— NIO 服务器(四)之 Exchange 层》

    • 《精尽 Dubbo 源码分析 —— NIO 服务器(五)之 Buffer 层》

    • 《精尽 Dubbo 源码分析 —— NIO 服务器(六)之 Netty4 实现》

    • 《精尽 Dubbo 源码分析 —— NIO 服务器(七)之 Netty3 实现》

    • 《精尽 Dubbo 源码分析 —— NIO 服务器(八)之 Mina1 实现》

    • 《精尽 Dubbo 源码分析 —— NIO 服务器(九)之 Grizzly 实现》

  • P2P 服务器

    • 《精尽 Dubbo 源码分析 —— P2P 服务器》

  • HTTP 服务器

    • 《精尽 Dubbo 源码分析 —— HTTP 服务器》

  • 序列化 Serialization

    • 《精尽 Dubbo 源码分析 —— 序列化(一)之 总体实现》

    • 《精尽 Dubbo 源码分析 —— 序列化(二)之 Dubbo 实现》

    • 《精尽 Dubbo 源码分析 —— 序列化(三)之 Kryo 实现》

  • 服务容器 Container

    • 《精尽 Dubbo 源码解析 —— 服务容器》

  • 集群容错 Cluster

    • 《精尽 Dubbo 源码解析 —— 集群容错(一)之抽象 API》

    • 《精尽 Dubbo 源码解析 —— 集群容错(二)之 Cluster 实现》

    • 《精尽 Dubbo 源码解析 —— 集群容错(三)之 Directory 实现》

    • 《精尽 Dubbo 源码解析 —— 集群容错(四)之 Loadbalance 实现》

    • 《精尽 Dubbo 源码解析 —— 集群容错(五)之 Merger 实现》

    • 《精尽 Dubbo 源码解析 —— 集群容错(六)之 Configurator 实现》

    • 《精尽 Dubbo 源码解析 —— 集群容错(七)之 Router 实现》

    • 《精尽 Dubbo 源码解析 —— 集群容错(八)之 Mock 实现》

  • 优雅停机

    • 《精尽 Dubbo 源码解析 —— 优雅停机》

  • 日志适配

    • 《精尽 Dubbo 源码解析 —— 日志适配》

  • 状态检查

    • 《精尽 Dubbo 源码解析 —— 状态检查》

  • 监控中心 Monitor

    • TODO 等待新版本

  • 管理中心 Admin

    • TODO 等待新版本

  • 运维命令 QOS

    • TODO 比较简单,未来写一下

  • 链路追踪 Tracing

    • 《SkyWalking 源码分析 —— Agent 插件(二)之 Dubbo》

ps:

  • 小圆点代表已完成;

  • 小方块代表未来计划完成

  • 钟华贤代表不考虑写

1.2 Dubbo 用户指南

本小节,我们将 《精尽 Dubbo 源码解析》 和 《Dubbo 用户指南》 做一次映射,方便大家直接找到感兴趣的功能的具体源码实现。当然,如果有整理不到位的地方,欢迎大家给我留言斧正。

【<2> 快速启动】

Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展进行加载。

如果不想使用 Spring 配置,可以通过 API 的方式 进行调用。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 调试环境搭建》

【<5.1> XML 配置】

有关 XML 的详细配置项,请参见:配置参考手册。如果不想使用 Spring 配置,而希望通过 API 的方式进行调用,请参见:API配置。想知道如何使用配置,请参见:快速启动。

对应源码解析文章:

  • 《精近 Dubbo 源码解析 —— XML 配置》

【<5.2> 属性配置】

如果公共配置很简单,没有多注册中心,多协议等情况,或者想多个 Spring 容器想共享配置,可以使用 dubbo.properties 作为缺省配置。

Dubbo 将自动加载 classpath 根目录下的 dubbo.properties,可以通过JVM启动参数 -Ddubbo.properties.file=xxx.properties 改变缺省配置位置。1

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 属性配置》

【<5.3> API 配置】

API 属性与配置项一对一,各属性含义,请参见:配置参考手册,比如:ApplicationConfig.setName("xxx")对应 <dubbo:application name="xxx" /> 1

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— API 配置(一)之应用》

  • 《精尽 Dubbo 源码解析 —— API 配置(二)之服务提供者》

  • 《精尽 Dubbo 源码解析 —— API 配置(三)之服务消费者》

【<5.4> 注解配置】

需要 2.5.7 及以上版本支持

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 注解配置》

【<6.1> 启动时检查】

Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true"。

可以通过 check="false" 关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。

另外,如果你的 Spring 容器是懒加载的,或者通过 API 编程延迟引用服务,请关闭 check,否则服务临时不可用时,会抛出异常,拿到 null 引用,如果 check="false",总是会返回引用,当服务恢复时,能自动连上。

  • 注意,服务提供者注册失败,是没有启动检查功能的。这一点,笔者一直理解错了。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 注册中心(一)之抽象 API》

【<6.2> 集群容错】

在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failover 重试。

cluster

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 集群容错(一)之抽象 API》

  • 《精尽 Dubbo 源码解析 —— 集群容错(二)之 Cluster 实现》

  • 《精尽 Dubbo 源码解析 —— 集群容错(三)之 Directory 实现》

【<6.3> 负载均衡】

在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用。

可以自行扩展负载均衡策略,参见:负载均衡扩展

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 集群容错(四)之 Loadbalance 实现》

【<6.4> 线程模型】

如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,比如只是在内存中记个标识,则直接在 IO 线程上处理更快,因为减少了线程池调度。

但如果事件处理逻辑较慢,或者需要发起新的 IO 请求,比如需要查询数据库,则必须派发到线程池,否则 IO 线程阻塞,将导致不能接收其它请求。

如果用 IO 线程处理事件,又在事件处理过程中发起新的 IO 请求,比如在连接事件中发起登录请求,会报“可能引发死锁”异常,但不会真死锁。

dubbo-protocol

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 线程池》

【<6.5> 直连提供者】

在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直联方式,将以服务接口为单位,忽略注册中心的提供者列表,A 接口配置点对点,不影响 B 接口从注册中心获取列表。

/user-guide/images/dubbo-directly.jpg

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 服务引用(二)之远程引用(Dubbo)》

【<6.6> 只订阅】

为方便开发测试,经常会在线下共用一个所有服务可用的注册中心,这时,如果一个正在开发中的服务提供者注册,可能会影响消费者不能正常运行。

可以让服务提供者开发方,只订阅服务(开发的服务可能依赖其它服务),而不注册正在开发的服务,通过直连测试正在开发的服务。

/user-guide/images/subscribe-only.jpg

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 服务引用(一)之本地暴露(Injvm)》

【<6.7> 只注册】

如果有两个镜像环境,两个注册中心,有一个服务只在其中一个注册中心有部署,另一个注册中心还没来得及部署,而两个注册中心的其它应用都需要依赖此服务。这个时候,可以让服务提供者方只注册服务到另一注册中心,而不从另一注册中心订阅服务。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 服务引用(一)之本地暴露(Injvm)》

【<6.8> 静态服务】

有时候希望人工管理服务提供者的上线和下线,此时需将注册中心标识为非动态管理模式。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 注册中心(二)之 Zookeeper》

  • 《精尽 Dubbo 源码分析 —— 注册中心(三)之 Redis》

【<6.9> 多协议】

Dubbo 允许配置多协议,在不同服务上支持不同协议或者同一服务上同时支持多种协议。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 服务暴露(一)之本地暴露(Injvm)》

  • 《精尽 Dubbo 源码分析 —— 服务暴露(二)之远程暴露(Dubbo)》

【<6.10> 多注册中心】

Dubbo 支持同一服务向多注册中心同时注册,或者不同服务分别注册到不同的注册中心上去,甚至可以同时引用注册在不同注册中心上的同名服务。另外,注册中心是支持自定义扩展的。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 服务暴露(一)之本地暴露(Injvm)》

  • 《精尽 Dubbo 源码分析 —— 服务暴露(二)之远程暴露(Dubbo)》

  • 《精尽 Dubbo 源码分析 —— 服务引用(一)之本地引用(Injvm)》

  • 《精尽 Dubbo 源码分析 —— 服务引用(二)之远程引用(Dubbo)》

【<6.11> 服务分组】

当一个接口有多种实现时,可以用 group 区分。

  • 《精尽 Dubbo 源码分析 —— 服务暴露(二)之远程暴露(Dubbo)》

  • 《精尽 Dubbo 源码分析 —— 服务引用(二)之远程引用(Dubbo)》

【<6.12> 多版本】

当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。

可以按照以下的步骤进行版本迁移:

  1. 在低压力时间段,先升级一半提供者为新版本

  2. 再将所有消费者升级为新版本

  3. 然后将剩下的一半提供者升级为新版本

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 服务暴露(二)之远程暴露(Dubbo)》

  • 《精尽 Dubbo 源码分析 —— 服务引用(二)之远程引用(Dubbo)》

  • 《精尽 Dubbo 源码解析 —— 服务调用(二)之远程调用(Dubbo)【2】同步调用》

【<6.13> 分组聚合】

按组合并返回结果 1,比如菜单服务,接口一样,但有多种实现,用group区分,现在消费方需从每种group中调用一次返回结果,合并结果返回,这样就可以实现聚合菜单项。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 集群容错(五)之 Merger 实现》

【<6.14> 参数验证】

参数验证功能 1 是基于 JSR303 实现的,用户只需标识 JSR303 标准的验证 annotation,并通过声明 filter 来实现验证 2。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 过滤器(十一)之 ValidationFilter》

【<6.15> 结果缓存】

结果缓存 1,用于加速热门数据的访问速度,Dubbo 提供声明式缓存,以减少用户加缓存的工作量 2。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 过滤器(十)之 CacheFilter》

【<6.16> 泛化引用】

泛化接口调用方式主要用于客户端没有 API 接口及模型类元的情况,参数及返回值中的所有 POJO 均用 Map 表示,通常用于框架集成,比如:实现一个通用的服务测试框架,可通过 GenericService 调用所有服务实现。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 调用特性(二)之泛化引用》

【<6.17> 泛化实现】

泛接口实现方式主要用于服务器端没有API接口及模型类元的情况,参数及返回值中的所有POJO均用Map表示,通常用于框架集成,比如:实现一个通用的远程服务Mock框架,可通过实现GenericService接口处理所有服务请求。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 调用特性(三)之泛化实现》

【<6.18> 回声测试】

回声测试用于检测服务是否可用,回声测试按照正常请求流程执行,能够测试整个调用是否通畅,可用于监控。

所有服务自动实现 EchoService 接口,只需将任意服务引用强制转型为 EchoService,即可使用。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 调用特性(一)之回音测试》

【<6.19> 上下文信息】

上下文中存放的是当前调用过程中所需的环境信息。所有配置信息都将转换为 URL 的参数,参见 schema 配置参考手册 中的对应URL参数一列。

RpcContext 是一个 ThreadLocal 的临时状态记录器,当接收到 RPC 请求,或发起 RPC 请求时,RpcContext 的状态都会变化。比如:A 调 B,B 再调 C,则 B 机器上,在 B 调 C 之前,RpcContext 记录的是 A 调 B 的信息,在 B 调 C 之后,RpcContext 记录的是 B 调 C 的信息。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 过滤器(二)之 ContextFilter》

【<6.20> 隐式参数】

可以通过 RpcContext 上的 setAttachment 和 getAttachment 在服务消费方和提供方之间进行参数的隐式传递。 1

/user-guide/images/context.png

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 过滤器(二)之 ContextFilter》

【<6.21> 异步调用】

基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小。 1

/user-guide/images/future.jpg

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务调用(二)之远程调用(Dubbo)【3】异步调用》

【<6.22> 本地调用】

本地调用使用了 injvm 协议,是一个伪协议,它不开启端口,不发起远程调用,只在 JVM 内直接关联,但执行 Dubbo 的 Filter 链。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 服务调用(一)之本地调用(Injvm)》

【<6.23> 参数回调】

参数回调方式与调用本地 callback 或 listener 相同,只需要在 Spring 的配置文件中声明哪个参数是 callback 类型即可。Dubbo 将基于长连接生成反向代理,这样就可以从服务器端调用客户端逻辑 1。可以参考 dubbo 项目中的示例代码。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务调用(二)之远程调用(Dubbo)【4】参数回调》

【<6.24> 事件通知】

在调用之前、调用之后、出现异常时,会触发 oninvoke、onreturn、onthrow 三个事件,可以配置当事件发生时,通知哪个类的哪个方法 1。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务调用(二)之远程调用(Dubbo)【3】异步调用》

【<6.25> 本地存根】

远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,比如:做 ThreadLocal 缓存,提前验证参数,调用失败后伪造容错数据等等,此时就需要在 API 中带上 Stub,客户端生成 Proxy 实例,会把 Proxy 通过构造函数传给 Stub 1,然后把 Stub 暴露给用户,Stub 可以决定要不要去调 Proxy。

/user-guide/images/stub.jpg

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 动态代理(三)之本地存根 Stub》

【<6.26> 本地伪装】

本地伪装 1 通常用于服务降级,比如某验权服务,当服务提供方全部挂掉后,客户端不抛出异常,而是通过 Mock 数据返回授权失败。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 集群容错(八)之 Mock 实现》

【<6.27> 延迟暴露】

如果你的服务需要预热时间,比如初始化缓存,等待相关资源就位等,可以使用 delay 进行延迟暴露。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— API 配置(二)之服务提供者》

【<6.28> 并发控制】

限制 com.foo.BarService 的每个方法,服务器端并发执行(或占用线程池线程数)不能超过 10 个

限制 com.foo.BarService 的 sayHello 方法,服务器端并发执行(或占用线程池线程数)不能超过 10 个

限制 com.foo.BarService 的每个方法,每客户端并发执行(或占用连接的请求数)不能超过 10 个

限制 com.foo.BarService 的 sayHello 方法,每客户端并发执行(或占用连接的请求数)不能超过 10 个

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 过滤器(四)之 ActiveLimitFilter && ExecuteLimitFilter》

  • 《精尽 Dubbo 源码解析 —— 集群容错(四)之 Loadbalance 实现》

【<6.29> 连接控制】

限制服务器端接受的连接不能超过 10 个 1:

限制客户端服务使用连接不能超过 10 个 2:

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 过滤器(四)之 ActiveLimitFilter && ExecuteLimitFilter》

【<6.30> 延迟连接】

延迟连接用于减少长连接数。当有调用发起时,再创建长连接。1

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务调用(二)之远程调用(Dubbo)【1】通信实现》

【<6.31> 粘滞连接】

粘滞连接用于有状态服务,尽可能让客户端总是向同一提供者发起调用,除非该提供者挂了,再连另一台。

粘滞连接将自动开启延迟连接,以减少长连接数。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 集群容错(一)之抽象 API》

【<6.32> 令牌验证】

通过令牌验证在注册中心控制权限,以决定要不要下发令牌给消费者,可以防止消费者绕过注册中心访问提供者,另外通过注册中心可灵活改变授权方式,而不需修改或升级提供者

/user-guide/images/dubbo-token.jpg

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 过滤器(八)之 TokenFilter》

【<6.33> 路由规则】

路由规则 1 决定一次 dubbo 服务调用的目标服务器,分为条件路由规则和脚本路由规则,并且支持可扩展 2。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 集群容错(七)之 Router 实现》

【<6.34> 配置规则】

向注册中心写入动态配置覆盖规则 1。该功能通常由监控中心或治理中心的页面完成。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 集群容错(六)之 Configurator 实现》

【<6.35> 服务降级】

可以通过服务降级功能 1 临时屏蔽某个出错的非关键服务,并定义降级后的返回策略。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 集群容错(八)之 Mock 实现》

【<6.36> 优雅停机】

Dubbo 是通过 JDK 的 ShutdownHook 来完成优雅停机的,所以如果用户使用 kill -9 PID 等强制关闭指令,是不会执行优雅停机的,只有通过 kill PID 时,才会执行。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 优雅停机》

【<6.37> 主机绑定】

缺省主机 IP 查找顺序:

  • 通过 LocalHost.getLocalHost() 获取本机地址。

  • 如果是 127.* 等 loopback 地址,则扫描各网卡,获取网卡 IP。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— API 配置(二)之服务提供者》

【<6.38> 日志适配】

自 2.2.1 开始,dubbo 开始内置 log4j、slf4j、jcl、jdk 这些日志框架的适配 1,也可以通过以下方式显示配置日志输出策略:

  1. 命令行

  2. 在 dubbo.properties 中指定

  3. 在 dubbo.xml 中配置

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 日志适配》

【<6.39> 访问日志】

如果你想记录每一次请求信息,可开启访问日志,类似于apache的访问日志。注意:此日志量比较大,请注意磁盘容量。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 过滤器(三)之 AccessLogFilter》

【<6.40> 服务容器】

服务容器是一个 standalone 的启动程序,因为后台服务不需要 Tomcat 或 JBoss 等 Web 容器的功能,如果硬要用 Web 容器去加载服务提供方,增加复杂性,也浪费资源。

服务容器只是一个简单的 Main 方法,并加载一个简单的 Spring 容器,用于暴露服务。

服务容器的加载内容可以扩展,内置了 spring, jetty, log4j 等加载,可通过容器扩展点进行扩展。配置配在 java 命令的 -D 参数或者 dubbo.properties 中。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务容器》

【<6.41> ReferenceConfig 缓存】

ReferenceConfig 实例很重,封装了与注册中心的连接以及与提供者的连接,需要缓存。否则重复生成 ReferenceConfig 可能造成性能问题并且会有内存和连接泄漏。在 API 方式编程时,容易忽略此问题。

因此,自 2.4.0 版本开始, dubbo 提供了简单的工具类 ReferenceConfigCache用于缓存 ReferenceConfig 实例。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— API 配置(三)之服务消费者》

【<6.42> 分布式事务】

分布式事务基于 JTA/XA 规范实现 1。

两阶段提交:

/user-guide/images/jta-xa.jpg

目前该功能暂未实现,如下是推荐阅读的内容:

  • 《RocketMQ 源码分析 —— 事务消息》

  • 《Sharding-JDBC 源码分析 —— 分布式事务(一)之最大努力型》

  • 《MyCAT 源码分析 —— XA分布式事务》

  • 《TCC-Transaction 源码解析 —— 精品合集》

  • 《Happylifeplat-TCC 源码解析 —— 精品合集》

  • 《Myth 源码解析 —— 精品合集》

【<6.43> 线程栈自动dump】

当业务线程池满时,我们需要知道线程都在等待哪些资源、条件,以找到系统的瓶颈点或异常点。dubbo通过Jstack自动导出线程堆栈来保留现场,方便排查问题

默认策略:

  • 导出路径,user.home标识的用户主目录

  • 导出间隔,最短间隔允许每隔10分钟导出一次

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 线程池》

【<6.44> Netty4】

dubbo 2.5.6版本新增了对netty4通信模块的支持

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— NIO 服务器(六)之 Netty4 实现》

【<8> schema 配置参考手册】

这里以 XML Config 1 为准,列举所有配置项 2。其它配置方式,请参见相应转换关系:属性配置,注解配置,API 配置。

对应源码解析文章:

  • 《精近 Dubbo 源码解析 —— XML 配置》

【<9.1> dubbo://】

Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

反之,Dubbo 缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。

dubbo-protocol.jpg

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务调用(二)之远程调用(Dubbo)【1】通信实现》

  • 《精尽 Dubbo 源码解析 —— 服务调用(二)之远程调用(Dubbo)【2】同步调用》

  • 《精尽 Dubbo 源码解析 —— 服务调用(二)之远程调用(Dubbo)【3】异步调用》

  • 《精尽 Dubbo 源码解析 —— 服务调用(二)之远程调用(Dubbo)【4】参数回调》

【<9.2> rmi://】

RMI 协议采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短连接和 JDK 标准序列化方式。

注意:如果正在使用 RMI 提供服务给外部访问 1,同时应用里依赖了老的 common-collections 包 2 的情况下,存在反序列化安全风险 3。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务调用(七)之远程调用(RMI)》

【<9.3> hessian://】

Hessian 1 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。

Dubbo 的 Hessian 协议可以和原生 Hessian 服务互操作,即:

  • 提供者用 Dubbo 的 Hessian 协议暴露服务,消费者直接用标准 Hessian 接口调用

  • 或者提供方用标准 Hessian 暴露服务,消费方用 Dubbo 的 Hessian 协议调用。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务调用(四)之远程调用(Hessian)》

【<9.4> http://】

基于 HTTP 表单的远程调用协议,采用 Spring 的 HttpInvoker 实现 1

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务调用(三)之远程调用(HTTP)》

【<9.5> webservice://】

基于 WebService 的远程调用协议,基于 Apache CXF 1 的 frontend-simple 和 transports-http 实现 2。

可以和原生 WebService 服务互操作,即:

  • 提供者用 Dubbo 的 WebService 协议暴露服务,消费者直接用标准 WebService 接口调用,

  • 或者提供方用标准 WebService 暴露服务,消费方用 Dubbo 的 WebService 协议调用。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务调用(五)之远程调用(Webservice)》

【<9.6> thrift://】

当前 dubbo 支持 1的 thrift 协议是对 thrift 原生协议 2 的扩展,在原生协议的基础上添加了一些额外的头信息,比如 service name,magic number 等。

使用 dubbo thrift 协议同样需要使用 thrift 的 idl compiler 编译生成相应的 java 代码,后续版本中会在这方面做一些增强。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务调用(十)之远程调用(Thrift)》

【<9.7> memcached://】

基于 memcached 1 实现的 RPC 协议 2。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务调用(九)之远程调用(Memcached)》

【<9.8> redis://】

基于 Redis 1 实现的 RPC 协议 2。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务调用(八)之远程调用(Redis)》

【<9.9> rest://】

对应文档为

  • 《在Dubbo中开发REST风格的远程调用(RESTful Remoting)》 。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务调用(六)之远程调用(REST)》

【<10.1> Multicast 注册中心】

Multicast 注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现。

/user-guide/images/multicast.jpg
  1. 提供方启动时广播自己的地址

  2. 消费方启动时广播订阅请求

  3. 提供方收到订阅请求时,单播自己的地址给订阅者,如果设置了 unicast=false,则广播给订阅者

  4. 消费方收到提供方地址时,连接该地址进行 RPC 调用。

组播受网络结构限制,只适合小规模应用或开发阶段使用。组播地址段: 224.0.0.0 - 239.255.255.255

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 注册中心(五)之 Multicast 》

【<10.2> zookeeper 注册中心】

Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用 1。

/user-guide/images/zookeeper.jpg

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— Zookeeper 客户端》

  • 《精尽 Dubbo 源码分析 —— 注册中心(一)之抽象 API》

  • 《精尽 Dubbo 源码分析 —— 注册中心(二)之 Zookeeper》

【<10.3> Redis 注册中心】

基于 Redis 1 实现的注册中心 2。

/user-guide/images/dubbo-redis-registry.jpg

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 注册中心(三)之 Redis》

【<10.4> Simple 注册中心】

Simple 注册中心本身就是一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 注册中心(四)之 Simple 》

【<11> Telnet 命令参考手册】

从 2.0.5 版本开始,dubbo 开始支持通过 telnet 命令来镜像服务治理。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— NIO 服务器(三)之 Telnet 层》

【<12> 在线运维命令-QOS】

dubbo 2.5.8 新版本重构了 telnet 模块,提供了新的 telnet 命令支持。

对应源码解析文章:

TODO

dubbo-ops

1.3 Dubbo 开发指南

本小节,我们将 《精尽 Dubbo 源码解析》 和 《Dubbo 开发指南》 做一次映射,方便大家直接找到感兴趣的功能的具体源码实现。当然,如果有整理不到位的地方,欢迎大家给我留言斧正。

【<1> 源码构建】

代码签出 
分支 
构建 
构建源代码 jar 包 
IDE 支持

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 调试环境搭建》

【<2> 框架设计】

/dev-guide/images/dubbo-framework.jpg

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 项目结构一览》

  • 《精近 Dubbo 源码解析 —— 核心流程一览》

【<3> 扩展点加载】

Dubbo 的扩展点加载从 JDK 标准的 SPI (Service Provider Interface) 扩展点发现机制加强而来。

Dubbo 改进了 JDK 标准的 SPI 的以下问题:

  • JDK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源。

  • 如果扩展点加载失败,连扩展点的名称都拿不到了。比如:JDK 标准的 ScriptEngine,通过 getName() 获取脚本类型的名称,但如果 RubyScriptEngine 因为所依赖的 jruby.jar 不存在,导致 RubyScriptEngine 类加载失败,这个失败原因被吃掉了,和 ruby 对应不起来,当用户执行 ruby 脚本时,会报不支持 ruby,而不是真正失败的原因。

  • 增加了对扩展点 IoC 和 AOP 的支持,一个扩展点可以直接 setter 注入其它扩展点。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 拓展机制 SPI》

【<5.1> 协议扩展】

RPC 协议扩展,封装远程调用细节。

契约:

  • 当用户调用 refer() 所返回的 Invoker 对象的 invoke() 方法时,协议需相应执行同 URL 远端 export() 传入的 Invoker 对象的 invoke() 方法。

  • 其中,refer() 返回的 Invoker 由协议实现,协议通常需要在此 Invoker 中发送远程请求,export() 传入的 Invoker 由框架实现并传入,协议不需要关心。

注意:

  • 协议不关心业务接口的透明代理,以 Invoker 为中心,由外层将 Invoker 转换为业务接口。

  • 协议不一定要是 TCP 网络通讯,比如通过共享文件,IPC 进程间通讯等。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 服务暴露(一)之本地暴露(Injvm)》

  • 《精尽 Dubbo 源码分析 —— 服务暴露(二)之远程暴露(Dubbo)》

  • 《精尽 Dubbo 源码分析 —— 服务引用(一)之本地引用(Injvm)》

  • 《精尽 Dubbo 源码分析 —— 服务引用(二)之远程引用(Dubbo)》

【<5.2> 调用拦截扩展】

服务提供方和服务消费方调用过程拦截,Dubbo 本身的大多功能均基于此扩展点实现,每次远程方法执行,该拦截都会被执行,请注意对性能的影响。

约定:

  • 用户自定义 filter 默认在内置 filter 之后。

  • 特殊值 default,表示缺省扩展点插入的位置。比如:filter="xxx,default,yyy",表示 xxx 在缺省 filter 之前,yyy 在缺省 filter 之后。

  • 特殊符号 -,表示剔除。比如:filter="-foo1",剔除添加缺省扩展点 foo1。比如:filter="-default",剔除添加所有缺省扩展点。

  • provider 和 service 同时配置的 filter 时,累加所有 filter,而不是覆盖。比如: 和 ,则 xxx,yyy,aaa,bbb 均会生效。如果要覆盖,需配置:

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 过滤器(一)之 ClassLoaderFilter》

  • 《精尽 Dubbo 源码解析 —— 过滤器(二)之 ContextFilter》

  • 《精尽 Dubbo 源码解析 —— 过滤器(三)之 AccessLogFilter》

  • 《精尽 Dubbo 源码分析 —— 过滤器(四)之 ActiveLimitFilter && ExecuteLimitFilter》

  • 《精尽 Dubbo 源码分析 —— 过滤器(五)之 TimeoutFilter》

  • 《精尽 Dubbo 源码分析 —— 过滤器(六)之 DeprecatedFilter》

  • 《精尽 Dubbo 源码分析 —— 过滤器(七)之 ExceptionFilter》

  • 《精尽 Dubbo 源码分析 —— 过滤器(八)之 TokenFilter》

  • 《精尽 Dubbo 源码分析 —— 过滤器(九)之 TpsLimitFilter》

  • 《精尽 Dubbo 源码分析 —— 过滤器(十)之 CacheFilter》

  • 《精尽 Dubbo 源码分析 —— 过滤器(十一)之 ValidationFilter》

【<5.3> 引用监听扩展】

当有服务引用时,触发该事件。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 服务引用(一)之本地引用(Injvm)》

【<5.4> 暴露监听扩展】

当有服务暴露时,触发该事件。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 服务暴露(一)之本地暴露(Injvm)》

【<5.5> 集群扩展】

当有多个服务提供方时,将多个服务提供方组织成一个集群,并伪装成一个提供方。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 集群容错(一)之抽象 API》

  • 《精尽 Dubbo 源码解析 —— 集群容错(二)之 Cluster 实现》

【<5.6> 路由扩展】

从多个服务提者方中选择一个进行调用。

  • 官方文档写的有问题,从多个服务提者方中筛选出所有匹配的结果集。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 集群容错(七)之 Router 实现》

【<5.7> 负载均衡扩展】

从多个服务提者方中选择一个进行调用

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 集群容错(四)之 Loadbalance 实现》

【<5.8> 合并结果扩展】

合并返回结果,用于分组聚合。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 集群容错(五)之 Merger 实现》

【<5.9> 注册中心扩展】

负责服务的注册与发现。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— Zookeeper 客户端》

  • 《精尽 Dubbo 源码分析 —— 注册中心(一)之抽象 API》

  • 《精尽 Dubbo 源码分析 —— 注册中心(二)之 Zookeeper》

  • 《精尽 Dubbo 源码分析 —— 注册中心(三)之 Redis》

  • 《精尽 Dubbo 源码分析 —— 注册中心(四)之 Simple 》

  • 《精尽 Dubbo 源码分析 —— 注册中心(五)之 Multicast 》

【<5.10> 监控中心扩展】

负责服务调用次和调用时间的监控。

对应源码解析文章:

TODO

【<5.11> 扩展点加载扩展】

扩展点本身的加载容器,可从不同容器加载扩展点。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 拓展机制 SPI》

【<5.12> 动态代理扩展】

将 Invoker 接口转换成业务接口。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 动态代理(一)之 Javassist》

  • 《精尽 Dubbo 源码分析 —— 动态代理(二)之 JDK》

【<5.13> 编译器扩展】

Java 代码编译器,用于动态生成字节码,加速调用。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 动态编译(一)之 Javassist》

  • 《精尽 Dubbo 源码分析 —— 动态编译(二)之 JDK》

【<5.14> 消息派发扩展】

通道信息派发器,用于指定线程池模型。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— NIO 服务器(一)之抽象 API》

【<5.15> 线程池扩展】

服务提供方线程程实现策略,当服务器收到一个请求时,需要在线程池中创建一个线程去执行服务提供方业务逻辑。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 线程池》

【<5.16> 序列化扩展】

将对象转成字节流,用于网络传输,以及将字节流转为对象,用于在收到字节流数据后还原成对象。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 序列化(一)之 总体实现》

  • 《精尽 Dubbo 源码分析 —— 序列化(二)之 Dubbo 实现》

  • 《精尽 Dubbo 源码分析 —— 序列化(三)之 Kryo 实现》

【<5.17> 网络传输扩展】

远程通讯的服务器及客户端传输实现。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— NIO 服务器(一)之抽象 API》

  • 《精尽 Dubbo 源码分析 —— NIO 服务器(二)之 Transport 层》

【<5.18> 信息交换扩展】

基于传输层之上,实现 Request-Response 信息交换语义。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— NIO 服务器(四)之 Exchange 层》

【<5.19> 组网扩展】

对等网络节点组网器。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 注册中心(五)之 Multicast 》

【<5.20> Telnet 命令扩展】

所有服务器均支持 telnet 访问,用于人工干预。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— NIO 服务器(三)之 Telnet 层》

【<5.21> 状态检查扩展】

检查服务依赖各种资源的状态,此状态检查可同时用于 telnet 的 status 命令和 hosting 的 status 页面。

对应源码解析文章:

TODO

【<5.22> 容器扩展】

服务容器扩展,用于自定义加载内容。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 服务容器》

【<5.23> 页面扩展】

对等网络节点组网器。

  • 官方文档写的有问题,应该是请求处理器,有点类似 Servlet 。

对应源码解析文章:

TODO

【<5.24> 缓存扩展】

用请求参数作为 key,缓存返回结果。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 过滤器(十)之 CacheFilter》

【<5.25> 验证扩展】

参数验证扩展点。

对应源码解析文章:

  • 《精尽 Dubbo 源码分析 —— 过滤器(十一)之 ValidationFilter》

【<5.26> 日志适配扩展】

日志输出适配扩展点。

对应源码解析文章:

  • 《精尽 Dubbo 源码解析 —— 日志适配》

1.4 Dubbo 运维指南

《Dubbo 运维指南》 ,暂时无映射的需要。

dubbo 应用示例 本文将创建3个工程: dubbo-provider 服务提供者工程 dubbo-consumer 服务消费者工程 dubbo-api 服务接口 1 api 方式使用 1.1 注册中心方式 创建interface工程,提供者和消费者均需要依赖 提供一个接口 public interface HelloService { /** * 返回一句话 * @param name * @return: java.lang.String * @Author: jt-ape 阅读详情

相关推荐

dubbo使用例子 dubbo使用例子

dubbo使用例子,首先api的生产jar包,然后在serviceone和ControllerOne引用,使用就可以。

分布式RPC框架Apache Dubbo

1. 软件架构的演进过程 软件架构的发展经历了由单体架构、垂直架构、SOA架构到微服务架构的演进过程,下面我们分别了解 一下这几个架构。 1.1 单体架构 1.2 垂直架构 1.3 SOA架构 1.4 微服务架构 2. Apache Dubbo概述 2.1 Dubbo简介 Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的、轻量级的开源Java RPC 框架,可以和Spring框架无缝集成,2018年阿里巴巴把这个框架捐献给...

woshinibabaang的博客 382

MR2数据集实战:5步搞定多模态谣言检测模型训练(附完整代码)

本文详细介绍了如何使用MR2多模态数据集构建高精度谣言检测系统,涵盖环境配置、数据准备、多模态特征工程、模型架构设计、训练调优及部署优化等5个关键步骤。通过双线性融合技术处理文本、图像和网页三模态数据,解决特征对齐和模态冲突等工程难题,并提供完整代码实现和性能优化方案。

weixin_42657024的博客 241

Dubbo入门案例

在Dubbo中所有的的服务调用都是基于接口去进行双方交互的。双方协定好Dubbo调用中的接口,提供者来提供实现类并且注册到注册中心上。调用方则只需要引入该接口,并且同样注册到相同的注册中心上(消费者)。即可利用注册中心来实现集群感知功能,之后消费者即可对提供者进行调用。我们所有的项目都是基于Maven去进行创建,这样相互在引用的时候只需要以依赖的形式进行展现就可以了。并且这里我们会通过maven的父工程来统一依赖的版本。建立maven工程 并且 创建API模块: 用于规范双方接口协定。......

凉茶铺的博客 3429

INS/伪距组合导航(2)

伪距惯导组合导航

u014430081的博客 830

Frida提取Cocos游戏XXTEA密钥的实战方法论

XXTEA是一种轻量级分组加密算法,广泛用于移动端游戏通信保护;其128位密钥的安全性直接决定网络协议逆向成败。在Cocos引擎生态中,密钥常以静态常量、JNI动态传递或Native运行时派生三种形态存在,导致传统静态分析失效。Frida凭借跨Java/Native注入能力与内存实时观测优势,成为捕获密钥‘出生瞬间’的关键工具——尤其适用于hook xxtea_encrypt函数入口、监控JNI参数传递、设置内存断点追踪派生过程等场景。本文聚焦Cocos2d-x与Cocos Creator项目,覆盖从密钥识

weixin_33509600的博客 419

Dubbo 实现原理与源码解析系列 —— 精品合集

摘要: 原创出处 http://www.iocoder.cn/Dubbo/good-collection/ 「芋道源码」欢迎转载,保留摘要,谢谢! 1.【芋艿】精尽 Dubbo 原理与源码专栏 2.【老徐】RPC 专栏 3.【肥朝】Dubbo 源码解析 4.【MR_QI】Dubbo 源码解析 5.【杨武兵】Dubbo 源码解析 666. 彩蛋

weixin_34306676的博客 1280

【操作系统】 Operation System 第二章:操作系统基础操作

2.1 操作系统的启动 (1)CPU, I/O, 内存通过总线连接。 (2)DISK:存放OS; BIOS:基本I/O处理系统( basic I/O system); Bootloader: 加载OS到内存中。 (3)当电脑通电时,段寄存器CS和指令寄存器IP能够确定一个内存地址,例如CS:IP = 0xf000:fff0. (4)POST(加电自检),寻找显卡和执行BIOS。(显示器,键盘…是否...

iwanderu的博客 1万+

【RPC 专栏】从跨语言调用到 dubbo2.js

点击上方“芋道源码”,选择“置顶公众号”技术文章第一时间送达!源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69+ 篇,预计总共 75+ 篇 )中文详细注释...

芋道源码 1878

云安全技术——搭建VPN

VPN(Virtual Private Network)是一种可以在公共网络上建立安全连接的技术。VPN是实现保密通信的基本手段,在windows系统上,可以直接进行VPN服务的搭建。1.VPN的工作原理:通过使用加密协议和认证机制,将本地计算机和远程服务器之间的通信加密和保护。2.VPN的分类:根据不同的方式和用途,VPN可以分为不同类型,例如远程访问VPN、站点到站点VPN等。3.VPN的优势:VPN可以带来许多好处,如提高数据安全性、隐藏真实IP地址、突破地理限制等。4.

qq_53142796的博客 3万+

uniapp [微信小程序] - 详解微信小程序端接入mqtt全流程及示例源码教程,uniApp微信小程序端如何接入MQTT插件并实现连接/断开+发布订阅+消息队列+离线重连等各种示例代码(开箱即用)

uniapp微信小程序接入MQTT,uniapp中使用mqtt,uniapp 微信小程序端接入mqtt示例代码教程,适用于微信小程序的MQTT插件,uniapp开发微信小程序连接mqtt,uniApp微信小程序接入MQTT协议,uniapp vue3微信小程序使用MQTT的小例子接入流程,使用uniapp开发小程序接入mqtt,如何在uniapp项目中使用mqtt,uniapp mqtt的使用示例,mqtt连接报错,如何在项目里集成mqtt,Mqtt协议,主动连接mqtt,订阅消息,实现发布,订阅和接收消息

🏆 前端领域优质创作者 2884

深入解析Java反射(1) - 基础

点击上方“芋道源码”,选择“置顶公众号”技术文章第一时间送达!源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69+ 篇,预计总共 75+ 篇 )中文详细注释...

芋道源码 154

【微服务】SpringBoot 整合Kafka 项目实战操作详解

SpringBoot 整合Kafka 实战操作详解

congge 5575

链路之下,让分布式系统不再“裸奔”

点击上方“芋道源码”,选择“置顶公众号”技术文章第一时间送达!源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69+ 篇,预计总共 75+ 篇 )中文详细注释...

芋道源码 316

FLACS-CFD 气云爆炸模拟全流程工况构建指南:从泄漏到爆炸

摘要: 本文详细介绍了使用FLACS-CFD模拟气云爆炸的全流程构建方法,重点解决泄漏模拟到爆炸模拟的气云文件传递问题。核心步骤包括: 项目规划:明确泄漏源(甲烷管道腐蚀泄漏)和爆炸场景,建立标准目录结构; 网格设计:泄漏与爆炸模拟需采用兼容的网格,爆炸域应为泄漏域的子区域且网格划分一致; 泄漏模拟配置:通过.inp文件定义几何、网格、风场、燃料及泄漏源参数,确保输出爆炸所需的气云文件(*.uni/*.fla); 关键设置:统一燃料名称、时间点匹配、路径正确性,避免版本兼容性问题。

huanghm88的专栏 767

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【RPC 专栏】深入理解 RPC 之集群篇

点击上方“芋道源码”,选择“置顶公众号”技术文章第一时间送达!源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69+ 篇,预计总共 75+ 篇 )中文详细注释...

芋道源码 755

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

中国程序员容易发音错误的单词

点击上方“芋道源码”,选择“置顶公众号”技术文章第一时间送达!源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69+ 篇,预计总共 75+ 篇 )中文详细注释...

芋道源码 738

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 分布式消息队列 RocketMQ 源码分析 —— 高可用
下一篇: 数据结构 | Java 队列 —— Queue 详细分析
公众号-芋道源码
博客等级 码龄10年 1636粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值