资料内容:
服务导出⼤概原理(⾯试时可以这么答)
服务导出的⼊⼝为ServiceBean中的export()⽅法,当Spring启动完之后,通过接收Spring的
ContextRefreshedEvent事件来触发export()⽅法的执⾏。
⼀个ServiceBean对象就表示⼀个Dubbo服务,ServiceBean对象中的参数就表示服务的参数,⽐如
timeout,该对象的参数值来⾄@Service注解中所定义的。
服务导出主要得做两件事情:
1. 根据服务的参数信息,启动对应的⽹络服务器(netty、tomcat、jetty等),⽤来接收⽹络请求
2. 将服务的信息注册到注册中⼼
但是在做这两件事情之前得先把服务的参数确定好,因为⼀个Dubbo服务的参数,除开可以在@Service注
解中去配置,还会继承Dubbo服务所属应⽤(Application)上的配置,还可以在配置中⼼或JVM环境变量
中去配置某个服务的参数,所以⾸先要做的是确定好当前服务最终的(优先级最⾼)的参数值。
确定好服务参数之后,就根据所配置的协议启动对应的⽹络服务器。在启动⽹络服务器时,并且在⽹络服
务器接收请求的过程中,都可以从服务参数中获取信息,⽐如最⼤连接数,线程数,socket超时时间等
等。
启动完⽹络服务器之后,就将服务信息注册到注册中⼼。同时还有向注册中⼼注册监听器,监听Dubbo的
中的动态配置信息变更。
服务概念的演化
1. DemoService接⼝表示⼀个服务,此时的服务表示服务定义
2. DemoServiceImpl表示DemoService服务的具体实现,此时的服务表示服务的具体实现
3. DemoService+group+version表示⼀个服务,此时的服务增加了分组和版本概念
4. http://192.168.1.112:80/com.tuling.DemoService表示⼀个服务,此时的服务增加了机器IP和Port,
表示远程机器可以访问这个URL来使⽤com.tuling.DemoService这个服务
5. http://192.168.1.112:80/com.tuling.DemoService?
timeout=3000&version=1.0.1&application=dubbo-demo-provider-application表示⼀个服务,
此时的服务是拥有参数的,⽐如超时时间、版本号、所属应⽤
在dubbo中就是⽤的最后⼀种⽅式来表示服务的。
服务导出要做的⼏件事情:
1. 确定服务的参数
2. 确定服务⽀持的协议
3. 构造服务最终的URL
4. 将服务URL注册到注册中⼼去
5. 根据服务⽀持的不同协议,启动不同的Server,⽤来接收和处理请求
6. 因为Dubbo⽀持动态配置服务参数,所以服务导出时还需要绑定⼀个监听器Listener来监听服务的参数
是否有修改,如果发现有修改,则需要重新进⾏导出