Dubbo-概述

作者: 我可能是个假开发 | 来源:发表于2023-01-30 20:09 被阅读0次

一、总体架构

总体架构.png
  • Container:服务运行容器,为服务的稳定运行提供运行环境。
  • Provider:提供方,暴露接口提供服务。
  • Consumer:消费方,调用已暴露的接口。
  • Registry:注册中心,管理注册的服务与接口。
  • Monitor:监控中心,统计服务调用次数和调用时间。

二、Container

需要一个容器来承载应用的运行,可以是 Tomcat 容器,也可以是 Jetty 容器,还可以是 Undertow 容器等等。
负责启动、加载,并运行服务提供者来提供服务。

三、Provider

1.启动注册中心

2.编写提供者

提供方应用工程的启动类

// 导入启动提供方所需要的Dubbo XML配置文件
@ImportResource("classpath:dubbo-04-xml-boot-provider.xml")
// SpringBoot应用的一键式启动注解
@SpringBootApplication
public class Dubbo04XmlBootProviderApplication {
    public static void main(String[] args) {
        // 调用最为普通常见的应用启动API
        SpringApplication.run(Dubbo04XmlBootProviderApplication.class, args);
        // 启动成功后打印一条日志
        System.out.println("【【【【【【 Dubbo04XmlBootProviderApplication 】】】】】】已启动.");
    }
}

提供方应用工程的Dubbo XML配置文件内容dubbo-04-xml-boot-provider.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
       http://dubbo.apache.org/schema/dubbo
       http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    <!-- 注册中心的地址,通过 address 填写的地址提供方就可以联系上 zk 服务 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>
    <!-- 提供者的应用服务名称 -->
    <dubbo:application name="dubbo-04-xml-boot-provider"></dubbo:application>
    <!-- 提供者需要暴露服务的协议,提供者需要暴露服务的端口 -->
    <dubbo:protocol name="dubbo" port="28040"></dubbo:protocol>
    <!-- 提供者暴露服务的全路径为 interface 里面的内容 -->
    <dubbo:service interface="com.hmilyylimh.cloud.facade.demo.DemoFacade"
                   ref="demoFacade"></dubbo:service>
    <!-- 提供者暴露服务的业务实现逻辑的承载体 -->
    <bean id="demoFacade" class="com.hmilyylimh.cloud.xml.demo.DemoFacadeImpl"></bean>
</beans>

3.注册中心信息

注册中心.png

通过 ls / 查看根目录,我们发现 Dubbo 注册了两个目录,/dubbo 和 /services 目录。


image.png

在提供方设置 dubbo.application.register-mode 属性来控制提供方应用使用接口级注册,还是应用级注册。

  • interface:只接口级注册。
  • instance:只应用级注册。
  • all:接口级注册、应用级注册都会存在,同时也是默认值。

四、Consumer

消费方应用工程的启动类:

// 导入启动消费方所需要的Dubbo XML配置文件
@ImportResource("classpath:dubbo-04-xml-boot-consumer.xml")
// SpringBoot应用的一键式启动注解
@SpringBootApplication
public class Dubbo04XmlBootConsumerApplication {
    public static void main(String[] args) {
        // 调用最为普通常见的应用启动API
        ConfigurableApplicationContext ctx =
                SpringApplication.run(Dubbo04XmlBootConsumerApplication.class, args);
        // 启动成功后打印一条日志
        System.out.println("【【【【【【 Dubbo04XmlBootConsumerApplication 】】】】】】已启动.");
        // 然后向提供方暴露的 DemoFacade 服务进行远程RPC调用
        DemoFacade demoFacade = ctx.getBean(DemoFacade.class);
        // 将远程调用返回的结果进行打印输出
        System.out.println(demoFacade.sayHello("I'm provider"));
    }
}

消费方应用工程的Dubbo XML配置文件内容:dubbo-04-xml-boot-consumer.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        
       http://dubbo.apache.org/schema/dubbo        
       http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    <!-- 消费者的应用服务名称,最好是大家当前应用归属的系统名称 -->
    <dubbo:application name="dubbo-04-xml-boot-consumer"></dubbo:application>
    <!-- 注册中心的地址,通过 address 填写的地址提供方就可以联系上 zk 服务 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>
    <!-- 引用远程服务 -->
    <dubbo:reference id="demoFacade"
            interface="com.hmilyylimh.cloud.facade.demo.DemoFacade">
    </dubbo:reference>
</beans>

如果提供方还没有启动,也就是说提供方还没有发布 DemoFacade 服务,这个时候,我们启动消费方会报错。

可以配置启动不检查服务:

  • 在消费方的 Dubbo XML 配置文件中,为 DemoFacade 服务添加 check="false" 的属性
<!-- 引用远程服务 -->
<dubbo:reference id="demoFacade" check="false"
        interface="com.hmilyylimh.cloud.facade.demo.DemoFacade">
</dubbo:reference>
  • 在消费方的 Dubbo XML 配置文件中,为整个消费方添加 check="false" 的属性
<!-- 为整个消费方添加启动不检查提供方服务是否正常 -->
<dubbo:consumer check="false"></dubbo:consumer>

消费方成功启动去注册中心订阅服务(是在消费方启动的过程中进行的):


消费方在注册中心信息.png

消费册选择订阅接口级注册信息还是订阅应用级注册信息配置:dubbo.application.service-discovery.migration

  • FORCE_INTERFACE:只订阅消费接口级信息。
  • APPLICATION_FIRST:注册中心有应用级注册信息则订阅应用级信息,否则订阅接口级信息,起到了智能决策来兼容过渡方案。
  • FORCE_APPLICATION:只订阅应用级信息。

消费方向提供方发起远程调用

// 然后向提供方暴露的 DemoFacade 服务进行远程RPC调用
DemoFacade demoFacade = ctx.getBean(DemoFacade.class);
// 将远程调用返回的结果进行打印输出
System.out.println(demoFacade.sayHello("I'm consumer"));

相关参数配置:

  • timeout:设置超时时间
  • retries:重试次数
  • cluster:故障转移
<!-- 引用远程服务 -->
<dubbo:reference id="demoFacade" cluster="failover" timeout="5000" retries="3"
        interface="com.cloud.facade.demo.DemoFacade">
</dubbo:reference>

常见的容错策略:


容错策略.png

负载均衡策:

<!-- 引用远程服务 -->
<dubbo:reference id="demoFacade" loadbalance="roundrobin"
        interface="com.cloud.facade.demo.DemoFacade">
</dubbo:reference>
  • loadbalance="random":随机类型
  • loadbalance="roundrobin":轮询

五、Registry

提供方节点在增加,/dubbo 和 /services 目录的信息也会随之增多,当服务新增或减少,Dubbo 默认的注册中心 ZooKeeper 有一层通知机制:
ZooKeeper 会将目录节点变更的事件通知给到消费方,然后消费方去 ZooKeeper 中拉取 DemoFacade 最新的所有提供方的节点信息放到消费方的本地,这样消费方就能自动感知新的提供方节点的存在了。

六、Monitor

不管是提供方服务,还是消费方服务,如果在处理调用过程中发生了异常,可以将服务的调用成功数、失败数、服务调用的耗时时间上送给监控中心。
通过在监控中心设置不同的告警策略,就能在第一时间感知到一些异常问题的存在,争取在用户上报问题之前尽可能最快解决异常现象。

极客时间《Dubbo 源码剖析与实战》学习笔记Day16 - http://gk.link/a/11VBp

相关文章

  • Dubbo-概述

    一、总体架构 Container:服务运行容器,为服务的稳定运行提供运行环境。 Provider:提供方,暴露接口...

  • 深入理解dubbo-原理概述

    Dubbo官网 什么是分布式系统 《分布式系统原理与范型》定义:分布式系统是若干独立计算机的集合,这些计算机对于用...

  • Dubbo-初识

    话说,第一见dubbo是一年前公司第三代技术选型会上。公司架构师在会上对dubbo和spring cloud做了一...

  • dubbo-架构

    http://shiyanjun.cn/archives/325.html

  • Dubbo-面试

    工作原理 service 层:provider 和 consumer,留给自己实现的接口 config 层:配置文...

  • 代码bug、环境bug,如何辨别?微服务架构Failed to

    Jenkins部署服务后,前端报错: 确认是否环境bug登录:dubbo-服务治理--服务名查询:服务是否正常,服...

  • Dubbo + Hystrix 实现服务熔断

    学习完整课程请移步 互联网 Java 全栈工程师 本节视频 【视频】Dubbo 实现微服务架构-Dubbo-使用 ...

  • Dubbo + Hystrix 熔断器仪表盘

    学习完整课程请移步 互联网 Java 全栈工程师 本节视频 【视频】Dubbo 实现微服务架构-Dubbo-使用 ...

  • 第一个 Dubbo 应用程序

    学习完整课程请移步 互联网 Java 全栈工程师 本节视频 【视频】Dubbo 实现微服务架构-Dubbo-服务提...

  • dubbo-环境搭建

    fork并clone 安装并配置zookeeper 启动Provider配置启动 启动Consumer配置启动 架...

网友评论

    本文标题:Dubbo-概述

    本文链接:https://www.haomeiwen.com/subject/ywzmhdtx.html