1.基础知识
分布式
理解:分布式系统是若干独立计算机的集合,这些计算机对与用户来说像是单个相关系统。
解决问题:随着网站应用规模的不断扩大,常规的垂直应用架构已经无法应对。
为什么使用dubbo:由于分布式之间各个模块或应用之间有着相互调用的关系,需要用Dubbo进行RPC通信(远程过程调用协议 Remote Procedure Call Protocol)。
RPC基本原理
过程简述:
1.客户端服务想要调用服务端的服务方法;
2.通知一个助手去调用
3.客户端小助手通过Sockets通信去连接服务器端;传输信息给服务端端,(如方法名,参数等)
4.服务端小助手收到客户端的消息,将消息传送给服务端进行方法调用
5.方法调用完成,返回参数值,按返回路程传送给客户端。
影响RPC性能的因素《待深挖》
1.《序列化》 序列化机制和反序列化机制
2. 《通信 》能否快速建立起RPC连接
2.dubbo
主要组件:
Container容器
Provider服务提供者
Registry注册中心
Consumer服务消费者
Monitor监控中心
dubbo执行流程
- Container启动
- Provider将自身的服务注册到注册中心《后期的Zookeeper》
- Consumer启动向注册中心发布自己要订阅的服务
- Consumer同步调用Provider提供的服务
- Consumer根据负载均衡算法,去调用Provider服务。
- 运行状态可以在Monitor去查看
dubbo配置
SpringBoot整合
服务端配置
dubbo.application.name=user-service
dubbo.registry.address=127.0.0.1:2181
dubbo.zookeeper=zookeeper
dubbo.protpcol.name dubbo
dubbo.protocol.name=dubbo
dubbo.protocol.port =20880
dubbo.registy.monitor=registry
<!--SpringApplication启动项-->
主程序类
@SpringBootApplication
@EnableDubbo
<!--Service端-->
@Service 注解
消费端配置
dubbo.application.name=user-consumer
dubbo.registry.address=127.0.0.1:2181
dubbo.moniter.protocol=registry
实现类
@Service
public class xxx implements xxxService{
//@Autowired 改为Reference
@Reference
UserService userService;
}
超时
<!--超时默认是1秒-->
<!--单个服务设置超时-->
<dubbo:reference interface=“com.awin.xxx.UserService” id="UserService" timeout="4000"></dubbo:reference>
<!--配置全部-->
<dubbo:consumer check=“false” timeout=“4000”></dubbo:consumer>
配置覆盖
以 timeout 为例,下图显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似:
方法级优先,接口级次之,全局配置再次之。
如果级别一样,则消费方优先,提供方次之。
其中,服务提供方配置,通过 URL 经由注册中心传递给消费方。
重试次数
retries
<dubbo:consumer timeout="5000" retries="3"/>
<!--幂等(设置重试次数)【查询,删除,修改】,重试过程对结果不发生改变-->
<!--非幂等(不能设置重试次数)【新增】-->