Netty在Dubbo服务暴露时何时被使用

Stella981
• 阅读 559

Dubbo的底层通信使用的是Netty.

关于Dubbo的服务暴露流程,网络上已经有很多优质的文章.此篇文章以Dubbo的服务暴露为主线(不会详细讲解),观察一下,Netty在服务暴露过程中何时被使用.

// 服务暴露的起点

流程会走到如下代码

private void doExportUrls() {

流程继续走到如下代

Invoker<?> invoker = proxyFactory.getInvoker(ref, (Class) interfaceClass, registryURL.addParameterAndEncoded(Constants.EXPORT_KEY, url.toFullString()));

基于SPI机制,protocol会调用com.alibaba.dubbo.registry.integration.RegistryProtocol#export,源码如下

@Override

第一行的doLocalExport方法,继续跟进

private <T> ExporterChangeableWrapper<T> doLocalExport(final Invoker<T> originInvoker) {

基于SPI机制,protocol会调用com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol#export,源码如下

public <T> Exporter<T> export(Invoker<T> invoker) throws RpcException {

继续跟进openServer方法

private void openServer(URL url) {

一直跟进,会依次调用如下几个主要方法

server = Exchangers.bind(url, requestHandler);

在创建NettyServer时候,最终会调用到如下代码

@Override

上面的代码就是很熟悉的Netty创建服务端的代码.最终会创建并启动服务端.

Netty在Dubbo服务暴露时何时被使用

也就是说,在暴露服务的过程中,在进行doLocalExport本地暴露的时候,会分别经过RegistryProtocol#export和DubboProtocol#export,最后通过Netty创建一个服务端,监听外部的接口调用请求.

虽然本地服务已经暴露,但是还需要将服务注册到注册中心(例如ZK)

在没有注册到ZK之前,查看下ZK信息

Netty在Dubbo服务暴露时何时被使用

是没有dubbo节点信息的.

@Override

当执行完register方法之后,再查看ZK信息

Netty在Dubbo服务暴露时何时被使用

已经有dubbo节点信息了,说明提供者已经注册到ZK上了.

**总结
**

Dubbo在暴露服务的过程中,首先会通过Netty创建并启动服务端,监听外部调用接口的请求.紧接着会将服务注册到注册中心(例如Zookeeper).

本文分享自微信公众号 - Netty历险记(infuq217)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Dubbo之服务消费原理
!(https://oscimg.oschina.net/oscnet/upa28a2508f9a95aa638dfaa1db5226f73b90.png)前言上篇文章《Dubbo之服务暴露》(https://my.oschina.net/u/3516086/blog/3186388"《Dubbo之服务暴露》")分析Dubbo服
Stella981 Stella981
3年前
Netty在Dubbo中的线程名称
在项目中,我们会使用RocketMQ和Dubbo.前者用于发送或消费消息,后者用于两个模块之间的接口调用.RocketMQ和Dubbo在它们的底层都使用Netty作为网络通信的框架.那么今天我们就来看一下,在Dubbo中,使用的Netty线程名称叫什么?环境和流程如下1.启动zookeeper2.一个简单的Dubbo提供者,并启动它
Stella981 Stella981
3年前
SpringBoot开发案例之整合Dubbo提供者(二)
!00.jpg(https://blog.52itstyle.com/usr/uploads/2017/07/1329278006.jpg)大家有没有注意到,上一篇中提供者,暴露接口的方式?混搭。springboot本身接口实现使用了注解的方式,而Dubbo暴露接口使用的是配置文件的实现方式,即如下:代码importorg.s
Easter79 Easter79
3年前
SpringBoot开发案例之整合Dubbo提供者(二)
!00.jpg(https://blog.52itstyle.com/usr/uploads/2017/07/1329278006.jpg)大家有没有注意到,上一篇中提供者,暴露接口的方式?混搭。springboot本身接口实现使用了注解的方式,而Dubbo暴露接口使用的是配置文件的实现方式,即如下:代码importorg.s
Stella981 Stella981
3年前
Dubbo之服务暴露
!(https://oscimg.oschina.net/oscnet/up4596697d7918a914b39348df311c6366353.png)前言本文Dubbo使用版本2.7.5Dubbo通过使用dubbo:service配置或@service在解析完配置后进行服务暴露,供服务消费者消费。Dubbo的
Stella981 Stella981
3年前
Dubbo之ProxyFactory
概述在分析服务暴露和服务引用的都提到ProxyFactory,它是Dubbo的代理工厂,只定义了两个方法。getInvoker,暴露服务时调用,将ref(真正的服务实现类)转化为InvokergetProxy,引用服务时调用,将Invoker对象转化为proxy代理对象InvokerInvoker是