1、stub:存根,桩,模拟的代理远端的服务,可以附加容错等功能。
2、消费方 stub: 内部使用proxy,提供容错等机制,配置时使用stub
<dubbo:reference id="userService" interface="org.huxin.dubbo.test.user.service.UserInterface"
stub="org.huxin.dubbo.test.UserServiceStub" protocol="dubbo"/>
public class UserServiceStub implements UserInterface {
//必须定义这个接口,以便接收dubbo在调用远程服务生成的服务代理类
private UserInterface userLocalService ;
//这个构造函数必须要提供,dubbo框架会在消费者这一方调用这个方法
public UserServiceStub(UserInterface userLocalService ) {
this.userLocalService = userLocalService ;
}
public User getUserById(Integer id) {
User user = null ;
try {
if (id == 1) {
user = this.userLocalService.getUserById(id) ;
}else {
user = new User();
user.setName("系统用户");
}
}catch(Exception e) {
user = new User();
user.setName("异常用户");
}
return user ;
}
}
3、架构
1》每个client 每个server 分别与zookeeper连接,并进行心跳检测,同时维护每个service的地址列表,和对应的client列表
2》 client从zookeeper通过服务名获取所有服务进程,并分别建立连接;server有变化时,zookeeper同步变化给client。调用时客户端负载均衡。
3》 server 注册自己到zk
4、分层架构
Serialize 序列化和工具
Transport 封装netty
Exchange 同步转异步,封装Request和Response
Protocol 封装Invocation和Result,扩展接口为Protocol、Invoker和Exporter
Monitor 监控次数和时间、
Cluster 负载均衡
Registry 注册,中心是URL
Proxy 接口的代理,
Config 服务的配置
service 具体业务逻辑
核心是exchange protocol,proxy
5、调用过程
com.alibaba.dubbo.common.bytecode.proxy-->InvokerInvocationHandler -->MockClusterInvoker-->FailoverClusterInvoker-->route规则-->DubboInvoker-->exchanger->Filterchain
ConsumerContextFilter->MonitorFilter->FutureFilter
6、暴露服务的过程
ClassPathXmlApplicationContext refresh-->ServiceConfig doExportUrlsFor1Protocol()
init bind -->Exporter --> url:invoker-->Wrapper(serviceImpl)