JAVA调试技能之dubbo调试----------telnet
dubbo作为一个远程调用框架
1》provider:暴露服务的服务提供方
2》consumer:调用远程服务的服务消费方
3》registry:服务注册与发现的注册中心
4》Monitor:统计服务的调用次调和调用时间的监控中心
5》Container:服务运行容器
调用关系说明:
a:服务容器负责启动,加载,运行服务提供者。
b:服务提供者在启动时,向注册中心注册自己提供的服务。
c:服务消费者在启动时,向注册中心订阅自己所需的服务。
d:注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
e:服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用
A:连通性
1:注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求压力较小。
2:监控中心雨泽统计个服务调用次数,调用时间等。填缝剂先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示。
3:服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此事件不包含网络开销。
4:注册中心、服务提供者、服务消费者三者之间均为长连接,监控中心除外。
5:注册中心通过长连接感知服务提供者的存在
dubbo配置
开发者需要关注的dubbo配置,包括三部分,配置文件位于spring/service/目录下,其中dubbo-provider.xml和dubbo.xml是必须配置,dubbo-consumer.xml是可选配置,根据需要确定,配置文件结构如下:
dubbo.xml
针对同一zookeeper集群内的dubbo服务,有个分组的概念,如果不进行分组,所有服务均会注册到默认的dubbo服务组里.但是考虑到服务管理的问题,通常同一系统的服务会注册到相同的服务组里,而不同系统的服务会注册到不同的分组.因此,我们需要将自己的服务注册到特定的服务组里,而不同组的服务是不能直接调用的,服务的跨系统调用通常意味着夸组调用,调用方需要知道被调用服务的组名,分组的相关配置在dubbo.xml中,通过配置新的registry来完成,示例中defaultRegistry为本系统的分组配置,thirdsys为外部系统的分组配置:
配置中的参数来源于systen.properties文件:
以及application.properties文件:
dubbo-consumer.xml
bs层可能需要调用其他系统的dubbo服务,需要对被调用的服务进行消费配置,其中registry属性的值就是上文dubbo.xml中配置的外部系统的服务分组配置id.由于统一了dubbo服务的接口,出现同一接口下有多个实现的情况,故配置服务消费的时候需要通过group来指定具体的实现,version属性指定消费服务的版本号,意味着同一个服务可以有多个版本,便于生产服务升级:
dubbo-provider.xml
as层的服务需要被暴露出去,以便其他系统或者模块调用, 其中registry属性的值就是上文dubbo.xml中配置的本系统服务分组id. 由于统一了dubbo服务的接口,出现同一接口下有多个实现的情况,故配置服务暴露的时候需要通过group来指定具体的实现,group的值建议与ref属性值相同,version指定发布服务的版本号: