一个基于dubbo协议的服务远程调用全过程
服务调用端:
当我们调用服务的时候Dubbo会生成一个代理对象,然后调用InvokerInvocationHandler#invoke方法
AbstractClusterInvoker#invoke:设置负载均衡器
FailoverClusterInvoker#doInvoke:处理集群容错,负载均衡选择一个后端服务
.........省略了一堆invoker的研究
经过一系列的invokers和Netty的handler后,最终调用Netty Client将消息发送出去,默认使用Netty(还有Mina,Grizzly)
服务提供端:
NettyServer启动后就可以以netty来监听端口并接收消息。接收到消息后再调用相应的DubboHandler,解析消息,最终找到需要的Service,再通过反射来调用invoker。请求到达服务端,首先会执行Netty的handler:
reply会调用一堆的dubbo invokers,最终到达你的服务:
然后会开启另一个线程处理response,首先会经过dubbo的一堆Invokers,然后再经过Netty的一堆 outbond handler:
最终通过NioSocketChannel#doWrite返回消息给服务调用者:
关注公众号“一米源码”了解更多精品文章
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验