本文共 3023 字,大约阅读时间需要 10 分钟。
本文为Dubbo学习笔记,基于《深度剖析Apache Dubbo 核心技术内幕》进行个人理解和总结。文中内容主要基于Dubbo 2.7.0版本,可能存在理解偏差,提建议。
在Dubbo中,服务的发布主要通过ServiceConfig#export
方法实现。其核心逻辑主要包含以下几个步骤:
此方法主要负责检查并更新子配置,确保配置的完整性和一致性。具体包括:
doExport
方法是服务发布的核心入口,主要负责进行以下工作:
doExportUrls
方法,进行服务URL生成和注册。doExportUrls
是服务URL生成的核心方法,它主要负责:
Dubbo中的URL不仅是一个信息传递的容器,更是一个灵活的配置载体。URL格式遵循:
protocol://username:password@host:port/path?key=value&key=value
在Dubbo中,URL主要用于服务发现和信息传递,具体包含以下参数:
protocol
:服务发布的协议类型,如 dubbo
、thrift
、http
、zk
等。username/password
:用户名及密码认证信息。host/port
:服务主机及端口信息。path
:接口服务路径。parameters
:服务相关参数,如timeout
、version
等。典型Dubbo URL示例:
dubbo://192.168.1.6:20880/moe.cnkirito.sample.HelloService?timeout=3000zk://127.0.0.1:2181/org.apache.dubbo.registry.RegistryService?application=demo-consumer&dubbo=2.0.2&interface=org.apache.dubbo.registry.RegistryService&pid=1214&qos.port=33333×tamp=1545721981946consumer://30.5.120.217/org.apache.dubbo.demo.DemoService?application=demo-consumer&category=consumers&check=false&dubbo=2.0.2&interface=org.apache.dubbo.demo.DemoService&methods=sayHello&pid=1209&qos.port=33333&side=consumer×tamp=1545721827784
服务的发布过程主要包含以下关键环节:
服务唯一名称通过以下方式生成:
UniqueServiceName = ServiceConfig#service + "-" + interfaceName
确保不同服务之间互不冲突。
创建ProviderModel
,包含服务信息、服务引用信息及扩展信息。
ProviderModel providerModel = new ProviderModel(getUniqueServiceName(), ref, interfaceClass);ApplicationModel.initProviderModel(getUniqueServiceName(), providerModel);
通过doExportUrls
方法生成服务暴露URL。对于支持多注册中心的协议,会先将服务信息注册至注册中心,再通过扩展点完成服务暴露。
根据URL前缀(如 dubbo://
)触发相应协议扩展点进行服务暴露。如果没有指定注册中心,Dubbo会通过双向通信直接完成服务暴露。
dubbo://service-host/com.foo.FooService?version=1.0.0
registry://registry-host/org.apache.dubbo.registry.RegistryService?export=URL.encode("dubbo://service-host/com.foo.FooService?version=1.0.0")
timestamp
等用于灰度发布或版本控制。loadRegistries
方法负责解析和加载所有注册中心信息。主要逻辑包括:
参数拼接逻辑如下:
Mapparams = new HashMap<>();params.put("path", serviceInterface);// 添加其他配置参数String finalUrl = UrlUtils.parseURLs(address, params).iterator().next().toString();
ServiceConfig#export
支持延迟发布,主要通过线程池定时触发doExport
。dubbo
、thrift
),通过protocol
参数指定。以上内容为对Dubbo 2.7.0版本服务发布及其注册中心机制的深度解析,供学习和研究参考。如有疑问或补充,请联系作者。
转载地址:http://mykcz.baihongyu.com/