Dubbo学习(三)----Dubbo暴露服务过程

1、Spring

基于spring开发,做到无缝对接spring,在使用上只有极少数的xml配置学习成本,在Dubbo内部继承了若干个类,自定义实现的xsd和配套的解析方法等。如果以后需要接入自定义的NameSpaceContext,同样需要类似的处理

  • 通过BeanNameAware修改bean的名称
  • ApplicationContextAware去获取Spring IOC的容器
  • IntializingBean的afterPropertiesSet去自定义实现bean的实例对象
  • ApplicationListener的onApplicationEvent接收各种事件
  • DisposableBean的destroy去销毁bean

获取Spring IOC容器之后,在自定义实现dubbo的服务bean时,就可以获取到系统配置的注册中心、使用的协议、均衡负责等内容(对注册中心、协议等对Spring而言只是个普通的bean而言),这样就可以完成对ServiceBean的属性输入。

2、SPI

虽然之前介绍过了SPI的整个的处理细节,详情可看Dubbo SPI 源码学习 & admin安装(二),在整个的dubbo中也确实大量使用中。可是真正的在调试服务暴露中还是有不少细节被忽略掉了。

  • 基本上所有的类都有通过拼接代码字符串再编译生成其对象
  • 动态生成的对象其实并没有做很多事情,只是根据配置的xml参数,动态决定选取合适的实现类,再调用其方法
  • 参数注入和spring的参数注入方法不一样的是,dubbo是获取类的所有set开头同时参数只有1个的公共方法,通过SPI取到参数的值,然后反射invoke注入的
  • Dubbo为了一些附加的功能,存在包装类的情况,每一个接口都有wrapper的存在,如果存在则最后返回的对象不是对象本身,而是经过层层包装产生的对象,例如Protocol

3、服务暴露流程

如果是我们去完成这个任务会怎么去做呢?有两点肯定是要实现的

  • 注册中心,需要把服务提供方的信息推送给注册中心统一管理,服务调用方能够感知到存在这个服务
  • 对外的网络端口,可通过套接字和外界(服务调用方)发生信息交换

服务调用方感知到服务的存在,然后获取其服务的套接字信息,然后直接通过网络IO完成信息交换

Dubbo其实也基本上按照这种思路来实现的,只是支持了多种协议,并且还有监控、统计等功能,层次分明。

1. 获取注册中心

注册中心的基本配置就是在xml配置的dubbo:registry,生成的URL也是注册协议的URL,例如
registry://127.0.0.1:2182/com.alibaba.dubbo.registry.RegistryService?application=dubbo-demo&client=zkclient&dubbo=2.5.3&group=dubbo-demo&owner=jwfy&pid=2772&registry=zookeeper&timestamp=1525276569763
会把一个dubbo的xml配置的基本信息给提取出去

2. 服务信息的组装

既然注册中心已经准备好了,那现在就需要处理我们对外暴露的service信息
对外暴露服务也需要配置的,这个配置就是从dubbo:protocol来的
这个配置会告诉系统,所有对外暴露的IO读取协议是什么,默认的是dubbo,其实也支持redis、http等
是处理IO数据流方式的协议
不过,如果没有IP、端口等数据,则从dubbo:provider提取
再配置其他属性数据,生成的URL,例如
dubbo://172.16.109.110:20880/com.jwfy.dubbo.product.ProductService?anyhost=true&application=dubbo-demo&default.loadbalance=random&
dubbo=2.5.3&interface=com.jwfy.dubbo.product.ProductService&methods=print,getStr&owner=jwfy
&pid=2772&side=provider&timestamp=1525313423899
这个对外的服务使用的那种均衡负责、暴露的接口、具体可以被调用的函数等,而且是属于提供方

3. 服务IO端口提供

既然网络IO端的协议数据已经准备好了,那就可以开启,等待服务方的调用
这点可以直接跳到DubboProtocol类的export操作了(以Dubbo协议为例子)
针对每一个URL都提取出一个key,然后存储对应的invoker、url等信息
真正操作中取的是服务名+协议端口为key,DubboExporter为value的一个map,后续就可以通过key反取出invoke对象
接下来就是使用哪种Transporter操作了,默认是使用了netty的NettyTransporter(netty是一种基于java开发的异步的、事件驱动的高效的网络IO框架),如果需要使用其他的IO框架,则需要在dubbo:provider设置service字段
现在网络对外的协议Netty已经准备好了,服务信息也已经准备好了,那接下来就按照特定的格式decode操作,把数据转变为字节流,由netty向外开放出来即可
由此服务调用方就可以通过网络IO 链接到服务提供方上

4. 服务的注册

服务的注册是另一个操作,也就是把当前提供的服务告诉给注册中心,后续服务调用方就可以订阅注册中心,从而知道有哪些服务了,当前例子是使用了zookeeper作为注册中心
现在我们知道的是对外暴露服务的url信息(也就是invoke对象中的url)
所以操作也就很明显了,先获取到注册中心的配置信息,然后把服务url信息转为zk协议的url信息,最后连接到注册中心,注册保存即可
这里面就有使用zookeeper的jar包功能,需要和注册中心交互的操作
此外还有些附属的功能,例如超时重试、连接信息的保存和读取(如果注册中心突然出现问题,服务端和客户端还可以利用本地文件缓存继续工作,只是不能再实时获取最新的订阅信息罢了)
一般本地的连接信息存储在/Users/XXX/.dubbo中,如果出现了无法注册无法调用的情况,可以考虑删除该文件重启服务


引用(本文章只供本人学习以及学习的记录,如有侵权,请联系我删除)

Dubbo 服务暴露 总结(五)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容