通俗易懂描述dubbo工作原理
关于dubbo的描述就不再赘述,直接进入主题,那就是dubbo的工作原理。dubbo分为服务提供者和服务消费者,主要的工作内容有以下几点:提供者暴露服务、消费者引入服务、提供者和消费者和注册中心之间的通信、消费者消费服务、监控中心、其他扩展
一、provider暴露服务
1、首先provider可以在配置文件中配置自己可以提供那些服务,通过<dubbo:service>可以进行配置或者注解的方式,并且在配置的时候需要配置注册中心、应用名、节点地址、通信协议等一系列参数(以DemoService为例子,下同)
2、dubbo是基于spring的,dubbo提供的服务在spring看来就是一个bean,叫做ServiceBean,而ServiceBean实现了Spring的InitializingBean、ApplicationContextAware、ApplicationListener等接口,所以当spring启动完成之后,ServiceBean实际上就已经被加载到spring容器中了,(此时DemoService已经作为一个bean存在spring容器中,但是还没有注册到注册中心,也没有暴露给外部,只是作为一个最基本的bean的存在),所以ServiceBean还监听了applicationContext启动完成的事件,执行额外的操作。
3、当spring容器启动完成之后,ServiceBean就需要将自己暴露给外部并且注册到注册中心了,这一步是ServiceBean的export方法中执行,也可以叫做导出方法
4、首先加载provider端dubbo端配置,如应用名称、注册中心地址、通信协议、端口号等基本信息,并且对这些配置进行读取获取是设置默认值,并且根据不同配置进行不同处理,如是否延迟加载等
5、所有配置信息加载完毕,就将这些配置信息进行组装到一起,封装成了一个URL对象,一个URL对象就包含了一个服务所有的信息,包含了接口到方法名称、参数列表、dubbo的配置信息等
6、现在DemoService被封装成了一个URL,那么就可以进行暴露出去了,暴露出去的意思实际就是告诉别人需要以什么样的协议来调用,所以服务的暴露针对不同的协议暴露的方式也不同。
7、Protocol接口提供了暴露服务和引入服务两个方法,不同的协议实现就需要实现这个接口来进行暴露服务,默认是dubbo协议,所以就通过DubboProtocol实现类来进行服务的暴露
8、暴露的过程实际就是将服务存入一个全局的Map中,key就是以URL为基础创建的
原创不易,完成人机校验,阅读全文