Pigeon发布流程

本文介绍了Pigeon的发布流程,从发布入口开始,详细讲解了服务配置,包括ServerConfig用于设置服务信息如端口号和工作线程数,而ProviderConfig则用于提供具体服务详情。每个ProviderConfig只能绑定一个接口。服务发布通过PublishPolicy对象实现,涉及ServiceMethodFactory的本地方法缓存,过滤无用方法,并利用Netty服务器和CuratorClient在Zookeeper集群中注册服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pigeon是什么我在这里就不介绍了 详细参见  dianping/pigeon: RPC framework of DIANPING

一.发布入口

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集群中注册节点来完成服务的注册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值