Skip to end of metadata
Go to start of metadata

SPI参考手册

(+) (#)

SPI使用范围
扩展接口仅用于系统集成,或Contributor扩展功能插件。

协议扩展

(+) ([#])

(1) 扩展说明:

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

契约:

  • 当用户调用refer()所返回的Invoker对象的invoke()方法时,协议需相应执行同URL远端export()传入的Invoker对象的invoke()方法。
  • 其中,refer()返回的Invoker由协议实现,协议通常需要在此Invoker中发送远程请求,export()传入的Invoker由框架实现并传入,协议不需要关心。

注意:

  • 协议不关心业务接口的透明代理,以Invoker为中心,由外层将Invoker转换为业务接口。
  • 协议不一定要是TCP网络通讯,比如通过共享文件,IPC进程间通讯等。

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxProtocol.java
XxxExporter.java
XxxInvoker.java
META-INF/dubbo/com.alibaba.dubbo.rpc.Protocol

调用拦截扩展

(+) (#)

(1) 扩展说明

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

  • 用户自定义filter默认在内置filter之后。
  • 特殊值default,表示缺省扩展点插入的位置。
    • 比如:filter="xxx,default,yyy",表示xxx在缺省filter之前,yyy在缺省filter之后。
  • 特殊符号-,表示剔除。
    • 比如:filter="-foo1",剔除添加缺省扩展点foo1。
    • 比如:filter="-default",剔除添加所有缺省扩展点。
  • provider和service同时配置的filter时,累加所有filter,而不是覆盖。
    • 比如:<dubbo:provider filter="xxx,yyy"/>和<dubbo:service filter="aaa,bbb" />,则xxx,yyy,aaa,bbb均会生效。
    • 如果要覆盖,需配置:<dubbo:service filter="-xxx,-yyy,aaa,bbb" />

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxFilter.java
META-INF/dubbo/com.alibaba.dubbo.rpc.Filter

引用监听扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxInvokerListener.java
META-INF/dubbo/com.alibaba.dubbo.rpc.InvokerListener

暴露监听扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxExporterListener.java
META-INF/dubbo/com.alibaba.dubbo.rpc.ExporterListener

集群扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxCluster.java
META-INF/dubbo/com.alibaba.dubbo.rpc.cluster.Cluster

路由扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxRouterFactory.java
META-INF/dubbo/com.alibaba.dubbo.rpc.cluster.RouterFactory

负载均衡扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxLoadBalance.java
META-INF/dubbo/com.alibaba.dubbo.rpc.cluster.LoadBalance

合并结果扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxMerger.java
META-INF/dubbo/com.alibaba.dubbo.rpc.cluster.Merger

注册中心扩展

(+) (#)

(1) 扩展说明:

负责服务的注册与发现。

(2) 扩展接口:

(3) 扩展配置:

(4) 扩展契约:

RegistryFactory.java
RegistryService.java
NotifyListener.java

(5) 已知扩展:

(6) 扩展示例:

Maven项目结构
XxxRegistryFactory.java
XxxRegistry.java
META-INF/dubbo/com.alibaba.dubbo.registry.RegistryFactory

监控中心扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxMonitorFactory.java
XxxMonitor.java
META-INF/dubbo/com.alibaba.dubbo.monitor.MonitorFactory

扩展点加载扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxExtensionFactory.java
META-INF/dubbo/com.alibaba.dubbo.common.extension.ExtensionFactory

动态代理扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxProxyFactory.java
META-INF/dubbo/com.alibaba.dubbo.rpc.ProxyFactory

编译器扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

自动加载

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxCompiler.java
META-INF/dubbo/com.alibaba.dubbo.common.compiler.Compiler

消息派发扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxDispatcher.java
META-INF/dubbo/com.alibaba.dubbo.remoting.Dispatcher

线程池扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxThreadPool.java
META-INF/dubbo/com.alibaba.dubbo.common.threadpool.ThreadPool

序列化扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxSerialization.java
META-INF/dubbo/com.alibaba.dubbo.common.serialize.Serialization

网络传输扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxTransporter.java
XxxServer.java
XxxClient.java
META-INF/dubbo/com.alibaba.dubbo.remoting.Transporter

信息交换扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxExchanger.java
XxxExchangeServer.java
XxxExchangeClient.java
META-INF/dubbo/com.alibaba.dubbo.remoting.exchange.Exchanger

组网扩展

(+) (#)

(1) 扩展说明:

对等网络节点组网器。

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxNetworker.java
META-INF/dubbo/com.alibaba.dubbo.remoting.p2p.Networker

Telnet命令扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxTelnetHandler.java
META-INF/dubbo/com.alibaba.dubbo.remoting.telnet.TelnetHandler
用法

状态检查扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxStatusChecker.java
META-INF/dubbo/com.alibaba.dubbo.common.status.StatusChecker

容器扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxContainer.java
META-INF/dubbo/com.alibaba.dubbo.container.Container

页面扩展

(+) (#)

(1) 扩展说明:

对等网络节点组网器。

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxPageHandler.java
META-INF/dubbo/com.alibaba.dubbo.container.page.PageHandler

缓存扩展

(+) (#)

(1) 扩展说明:

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

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxCacheFactory.java
XxxCacheFactory.java
META-INF/dubbo/com.alibaba.dubbo.cache.CacheFactory

验证扩展

(+) (#)

(1) 扩展说明:

参数验证扩展点。

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxValidation.java
XxxValidator.java
META-INF/dubbo/com.alibaba.dubbo.validation.Validation

日志适配扩展

(+) (#)

(1) 扩展说明:

日志输出适配扩展点。

(2) 扩展接口:

(3) 扩展配置:

(4) 已知扩展:

(5) 扩展示例:

Maven项目结构
XxxLoggerAdapter.java
XxxLogger.java
META-INF/dubbo/com.alibaba.dubbo.common.logger.LoggerAdapter
Labels:
None
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.

Anonymous replies:

You are not logged in. Any changes you make will be marked as anonymous.
CAPTCHA image