77### Dubbo的架构
88<img src =" https://raw.githubusercontent.com/ipipman/JavaSpringBootSamples/master/ReadmeMaterial/dubbo/991608375409_.pic.jpg " width = " 500 " height = " 320 " alt =" 图片名称 " align =center />
99
10- ##### 上述节点说明
10+ #### 上述节点说明
1111> - Provider:暴露服务的服务提供方;
1212> - Consumer:调用远程服务的服务消费方;
1313> - Registry: 服务注册与发现的注册中心;
1414> - Monitor:统计服务的调用次数和调用时间的监控;
1515> - Container:服务运行容器;
1616
17- ##### 调用关系说明
17+ #### 调用关系说明
18181 . 服务容器负责启动,加载,运行服务提供者。
19192 . 服务提供者在启动时,向注册中心注册自己提供的服务。
20203 . 服务消费者在启动时,向注册中心订阅自己所需的服务。
21214 . 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
22225 . 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
23236 . 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
2424
25- ##### Dubbo架构重要的知识点
25+ #### Dubbo架构重要的知识点
2626> - 注册中心负责服务地址的注册和查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小;
2727> - 监控中心负责统计各个服务调用次数,调用时间等,统计先在内容汇总后每分钟一次发送到监控中心服务器,并以报表的方式展现;
2828> - 注册中心,服务提供者,服务消费者三者均为长连接,监控中心除外;
3535### Dubbo 工作原理
3636<img src =" https://raw.githubusercontent.com/ipipman/JavaSpringBootSamples/master/ReadmeMaterial/dubbo/1001608375467_.pic.jpg " width = " 700 " height = " 640 " alt =" 图片名称 " align =center />
3737
38- ##### Dubbo各层说明,除了Service和Config层为API,其它各层均为SPI
38+ #### Dubbo各层说明,除了Service和Config层为API,其它各层均为SPI
3939> - 第一层:service层,接口层,给服务提供者和消费者来实现的;
4040> - 第二层:config层,配置层,主要是对dubbo进行各种配置的;
4141> - 第三层:proxy层,服务接口透明代理,生成服务的客户端Stub和服务端Skeleton;
4747> - 第九层:transport层,网络传输层,抽象mina和netty为统一接口;
4848> - 第十层:serialize层,数据序列化层,网络传输需要;
4949
50- ##### Dubbo提供的负载均衡策略
50+ #### Dubbo提供的负载均衡策略
5151在集群负载均衡时,Dubbo提供了多种负载均衡策略,默认是Random随机调用
52521 . Random LoadBalance
5353 - 随机,按权重设计随机概率;
61614 . ConsistentHash LoadBalance
6262 - 一致性Hash,相同参数的请求总是发到同一提供者
6363
64- ##### Dubbo的健壮性
64+ #### Dubbo的健壮性
65651 . 监控中心宕掉不影响使用,只是会丢失部分采集数据;
66662 . 注册中心对等集群,任意一台宕掉后,将自动切换到另一台;
67673 . 注册中心全部宕掉后,服务提供者和服务消费者仍然可以通过本地缓存列表进行通讯;
68684 . 服务提供者无状态,任意一台宕掉后,不影响使用;
69695 . 服务提供者全部宕机后,服务消费者应用将无法使用,并无限次数的重试等待服务提供者恢复;
7070
7171### Dubbo注解方式实战
72- ##### 1. 编写Provider端Hello服务
72+ #### 1. 编写Provider端Hello服务
7373``` java
7474@Service (version = AnnotationConstants . VERSION )
7575public class HelloServiceImpl implements IHelloService {
@@ -90,7 +90,7 @@ public class HelloServiceImpl implements IHelloService {
9090}
9191```
9292
93- ##### 2. 配置Dubbo的Provider端
93+ #### 2. 配置Dubbo的Provider端
9494``` java
9595@Configuration
9696@EnableDubbo (scanBasePackages = " com.ipman.sample.dubbo.annotation.service.impl" )
@@ -106,7 +106,7 @@ public class ProviderConfiguration {
106106}
107107```
108108
109- ##### 3. 启动zookeeper,启动Dubbo的Provider端
109+ #### 3. 启动zookeeper,启动Dubbo的Provider端
110110``` java
111111@SpringBootApplication
112112public class DubboAnnotationProviderApplication {
@@ -138,7 +138,7 @@ public class DubboAnnotationProviderApplication {
138138}
139139```
140140
141- ##### 4.配置Dubbo的Consumer端
141+ #### 4.配置Dubbo的Consumer端
142142``` java
143143@Configuration
144144@EnableDubbo (scanBasePackages = " com.ipman.sample.dubbo.annotation.action" )
@@ -149,7 +149,7 @@ public class ConsumerConfiguration {
149149}
150150```
151151
152- ##### 5.配置Consumer要消费的Provider服务
152+ #### 5.配置Consumer要消费的Provider服务
153153``` java
154154@Component (" annotationAction" )
155155public class AnnotationAction {
0 commit comments