分布式远程调度(RPC)框架
Registry
/ \
consumer provider
| container
\ /
monitor
健壮性
1.zookepper集群作为Registry
2.客户端缓存
3.负载均衡(客户端或服务端:接口级别或方法级别)
a.(默认)基于权重的随机策略
b.基于权重的轮询策略
c.最小响应速度
d.一致性hash,根据订单id算hash来指定服务端ip
4.容错(客户端或服务端)搭配Hystrix更强大容错功能。
a.客户端暂时不真实发起调用,直接返回null
b.客户端调用失败或超时时,直接返回null
c.失败后立即切换到其它服务ip
失败后定时重试或记录日志
d.广播调用。
注册中心:
可以用zookepper或redis
服务端:
配置:
1.指定自己的应用名称
2.指定注册中心(协议、地址、端口)
3.指定自己以什么协议对外提供服务,及端口号
4.指定要提供哪个接口作为服务、接口服务名
5.指定具体服务实现类。
消费端:
配置:
1.指定自己的应用名称
2.指定注册中心(协议、地址、端口)
3.指定要调用的服务接口(由dubbo生成代理对象)
管理控制台
提供者 路由规则 动态配置 访问控制 权重调节 负载均衡 负责人,等管理功能
监控中心
可以用来显示接口暴露,注册情况,也可以看接口的调用明细,调用时间等。
springBoot+dubbo
服务端:
1.依赖dubbo-springBoot-starter的jar包
2.主启动类加@EnableDubbo注解
3.在application.properties配置
1.指定自己的应用名称
2.指定注册中心(协议、地址、端口)
3.指定自己以什么协议对外提供服务,及端口号
4.在提供服务的实现类上加@com.alibaba.dubbo.config.annotation.Service注解
客户端:
1.依赖dubbo-springBoot-starter的jar包
2.主启动类加@EnableDubbo注解
3.在application.properties配置
1.指定自己的应用名称
2.指定注册中心(协议、地址、端口)
3.指定自己以什么协议对外提供服务,及端口号
4.在ioc注入组件时用@com.alibaba.dubbo.config.annotation.Reference注解
5.或直连到服务端@Reference(url="127.0.0.1:20882"),即使zookpper宕机也可以调用。
或使用
@ImportResource(location="classpath:provider.xml")使用xml的配置方式
或使用
@Configuration方式向容器中注入以上配置对象。
@DubboComponentScan(basePackages="xxx.impl")
借Hystrix更强大容错功能。
服务端
1.导入hystrix的jar包
2.主启动类加@EnableHystrix注解
3.加@HystrixCommand配置,就会经过hystrix代理。
客户端
1.导入hystrix的jar包
2.主启动类加@EnableHystrix注解
3.方法级别加@HystrixCommand(fallbackMethod="新写的补偿方法")
原理解析:
服务端:
由dubbo的标签解析器来解析xml或注解的配置,得到总的service服务管理类。它会在自己被spring创建后被调用after()方法来从前面的配置中填充自己的属性,
然后将所有要暴露的接口实现对象以一个个代理类的形式暴露给注册中心,并在自己服务器上监听自己提供服务的端口号及协议。
客户端
启动时也是由dubbo的标签解析器来解析xml或注解的配置,得到总的service服务管理类。它会在自己被spring创建后被调用after()方法来从前面的配置中填充自己的属性,
从注册中心监听自己要用的服务,并创建代理对象保存起来。当本地程序要发起调用时,由代理对象一步步通过过滤器链-本地缓存-负载均衡-重试等最终调netty发起远程连接。