1、框架和流程:
节点角色说明
节点 | 角色说明 |
Provider | 暴露服务的服务提供方 |
Consumer | 调用远程服务的服务消费方 |
Registry | 服务注册与发现的注册中心 |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
Container | 服务运行容器 |
调用关系说明:
0.start:服务容器负责启动,加载,运行服务提供者。
1.register:服务提供者在启动时,向注册中心注册自己提供的服务。
2.subscribe:服务消费者在启动时,向注册中心订阅自己所需的服务。
3.notify:注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4.invoke:服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5.count:服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
2、服务提供者的核心配置文件:
第一步:先指定服务提供者的名称,名称要保证唯一性,建议使用项目名称。
<dubbo:application name="xxx"/>
第二步:指定协议名称和端口号。官方推荐协议选用dubbo,端口号选用20880。
<dubbo:application name="dubbo" port="20880"/>
第三步:指定注册中心,选用Zookeeper。
<dubbo:registry address="zookeeper://localhost:2181"/>
第四步:暴露服务。interface 表示暴露接口的全限定类名;ref 表示引用接口在spring容器中的接口名称;registry表示使用直连的方式 N/A。
<dubbo:service interface="" ref="" registry=""/>
第五步:加载接口实现类。
<bean id=" " class=" ">
然后将配置文件加载到web.xml中,暴露接口。
3、消费者的核心配置文件:
第一步:同上。
第二步:同上面第三步。
第三步:引用远程接口。id表示远程引用服务的代理对象名称;interface 表示接口的全限定类名;url表示调用远程接口的服务地址;registry表示使用直连的方式 N/A。
<dubbo:reference id=" " interface=" " url="" registry=" "/>
4、属性加载属性:
虚拟机参数-->xml配置-->properties
5、springboot和dubbo整合的三种方式:
(1)、导入dubbo-starter。在application.properities中配置属性,使用@Service暴露服务,使用@Reference 消费服务(引用服务),进行远程引用。(旧方法)
ps:使用此方法需要开启注解@EnableDubbo。
(2)、保留dubbo的xml配置文件。导入dubbo-starter,使用@ImportResource导入配置文件。
(3)、使用注解的方式,将每一个组件手动创建到容器中。
、当Zookeeper宕机后,消费者是能调用服务者的服务的,因为采用了dubbo直连方式,有本地缓存。即使注册中心全部宕机后,服务提供者和消费提供者仍能通过本地缓存通讯。
6、四种负载均衡策略:
(1)Random LoadBalance(基于权重的随机负载均衡机制)
ps:权重越大得到的机会就越高。这里强烈建议不要权值写死,因为在注册中心上可以增和减权值。
(2)RoundRobin LoadBalance(基于权重的轮询负载均衡机制)
ps:因为userService1的权重为100,总权重为350,所以概率是2/7,所以会有两个1。剩下两个以此类推......
(3)最少活跃数-负载均衡机制(LeastActive LoadBalance)
ps: 活跃数指调用前后计数差。因为userService1的的活跃数为100,最快,所以会最优先调用此服务器。
(4)一致性hash-负载均衡机制(ConsistentHash LoadBalance)
ps: 由id决定去哪台服务器。