一.发布入口
bean id="" class="com.dianping.dpsf.spring.ServiceRegistry" init-method="init" lazy-init="false">
<property name="port" value="4000"/>
<property name="services">
<map>
<entry key="" value-ref=""/>
<entry key="" value-ref=""/>
</map>
</property>
如果需要发布pigeon服务,那么通过上面的配置文件你可以完成这样一件事情
这里简单介绍下配置参数
bean id 是服务发布之后,容器通过id调用服务
class 是服务注册的主类
map 则是暴露的服务列表
二.服务配置
ServiceRegistry 初始化方法
两个关键的对象ServerConfig , ProviderConfig
ServerConfig主要是配置服务,例如 端口号,工作线程数等与具体服务无关的信息
ProviderConfig则是提供具体的服务信息,一个ProviderConfig对象对应着上面的bean id ,并持有ServerConfig对象
注意点:ProviderConfig中会持有一个serviceInterface对象,也就是说服务暴露只允许单接口,如果你的服务实现了两个接口,那么最终暴露出去的也只能是一个接口。
配置完成后就到了服务发布的流程
三.服务发布
Pigeon的服务发布是通过PublishPolicy这一对象完成
发布主流程

3.1ServiceMethodFactory 本地方法缓存
通过ServiceMethodFactory完成服务方法和方法需要的参数列表的缓存
上面注意到ingoreMethods,因为Java中所有对象都是继承Object对象的,所以存在一些toString等无用方法,通过ignoreMethods方法过滤掉
3.2服务提供
ProviderBootStrap.startup()
通过启动一个Netty服务器,每一个服务通过对应一个Server ,每个Server对应一个ProviderConfig。
ProviderBootStrap 变量

因为pigeon是基于http的所以这里是httpServer ; serversMap则是name,server的缓存
3.3服务发布
主要通过curatorClient来实现服务的注册 (CuratorClient是zk的一个辅助库),通过zk集群中注册节点来完成服务的注册