Dubbo服务调用过程

本文深入解析Dubbo框架中服务注册与发现的流程,以及如何利用Netty实现消费者与提供者之间的RPC远程调用。从Spring容器启动过程入手,详细阐述ServiceBean的初始化、ServerSocket的开启及NettyServer的创建。最后,揭示Client发起请求至完成RPC调用的整个过程。

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

我理解的是,当服务启动的时候,会将要注册的服务封装成一个URL 然后往 zookeeper 进行注册,

而当我们进行调用的时候,spring会调用getBean的时候,就会创建 NettyClient 对象,构造出一个 Socket 客户端,进行连接服务端

最终会调用 HeaderExchangeChannel 的 request 方法,通过 channel 进行请求。

Provider 作为被访问方,肯定是一个 Server 模式的 Socket。如何启动的呢?

当 Spring 容器启动的时候,会调用一些扩展类的初始化方法,比如继承了 InitializingBean,ApplicationContextAware,ApplicationListener 。而 dubbo 创建了 ServiceBean 继承了一个监听器。Spring 会调用他的 onApplicationEvent 方法,该类有一个 export 方法,用于打开 ServerSocket 。

然后执行了 DubboProtocol 的 createServer 方法,然后创建了一个 NettyServer 对象。NettyServer 对象的

 

 

可以看到,dubbo 使用 Netty 还是挺简单的,消费者使用 NettyClient,提供者使用 NettyServer,Provider 启动的时候,会开启端口监听,使用我们平时启动 Netty 一样的方式。而 Client 在 Spring getBean 的时候,会创建 Client,当调用远程方法的时候,将数据通过 dubbo 协议编码发送到 NettyServer,然后 NettServer 收到数据后解码,并调用本地方法,并返回数据,完成一次完美的 RPC 调用。

 

 

本人没用过 Dubbo,只是看些文章进行写总结,写的不好请勿喷,多多给与意见。谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值