【Dubbo】三种Dubbo配置与实现原理(XML、注解、API)

您所在的位置:网站首页 dubbo加载原理 【Dubbo】三种Dubbo配置与实现原理(XML、注解、API)

【Dubbo】三种Dubbo配置与实现原理(XML、注解、API)

2024-02-23 05:00| 来源: 网络整理| 查看: 265

📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。

        

📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。

        

🏆 2022博客之星TOP3 | CSDN博客专家 | 后端领域优质创作者 | CSDN内容合伙人

🏆 InfoQ(极客邦)签约作者、阿里云专家 | 签约博主、51CTO专家 | TOP红人、华为云享专家

        

🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~ 

🍅 文末获取联系 🍅   👇🏻 精彩专栏推荐订阅收藏 👇🏻

专栏系列(点击解锁)

学习路线(点击解锁)

知识定位

🔥Redis从入门到精通与实战🔥

Redis从入门到精通与实战

围绕原理源码讲解Redis面试知识点与实战

🔥MySQL从入门到精通🔥

MySQL从入门到精通

全面讲解MySQL知识与企业级MySQL实战

🔥计算机底层原理🔥

深入理解计算机系统CSAPP

以深入理解计算机系统为基石,构件计算机体系和计算机思维

Linux内核源码解析

围绕Linux内核讲解计算机底层原理与并发

🔥数据结构与企业题库精讲🔥

数据结构与企业题库精讲

结合工作经验深入浅出,适合各层次,笔试面试算法题精讲

🔥互联网架构分析与实战🔥

企业系统架构分析实践与落地

行业最前沿视角,专注于技术架构升级路线、架构实践

互联网企业防资损实践

互联网金融公司的防资损方法论、代码与实践

🔥Java全栈白宝书🔥

精通Java8与函数式编程

本专栏以实战为基础,逐步深入Java8以及未来的编程模式

深入理解JVM

详细介绍内存区域、字节码、方法底层,类加载和GC等知识

深入理解高并发编程

深入Liunx内核、汇编、C++全方位理解并发编程

Spring源码分析

Spring核心七IOC/AOP等源码分析

MyBatis源码分析

MyBatis核心源码分析

Java核心技术

只讲Java核心技术

本文目录

本文目录

本文导读

一、Dubbo配置概述

1、Dubbo 中的 URL 统一模型

2、Dubbo配置实现原理

二、Dubbo配置-基于XML配置实现

三、Dubbo配置-基于注解(Annotation )实现

四、Dubbo配置-基于API实现

五、Dubbo配置项解析

总结

本文导读

本文先讲解Dubbo配置概述,了解Dubbo中的URL统一模型和Dubbo配置实现原理,在三种Dubbo配置中,主要是基于XML配置实现的,并附Dubbo配置项解析,基于Annotation实现和基于API实现简要了解即可。

一、Dubbo配置概述 1、Dubbo 中的 URL 统一模型

从实现原理层面,最终 Dubbo 所有的配置项都会被组装到 URL 中,以 URL 为载体在后续的启动、RPC 调用过程中传递,进而控制框架行为。

dubbo 中的 URL,主要用于在各个扩展点之间传递数据,组成此 URL 对象的具体参数如下: protocol:一般是 dubbo 中的各种协议 如:dubbo thrift http zk username/password:用户名/密码 host/port:主机/端口 path:接口名称 parameters:参数键值对

public URL(String protocol, String username, String password, String host, int port, String path, Map parameters) { if ((username == null || username.length() == 0) && password != null && password.length() > 0) { throw new IllegalArgumentException("Invalid url, password without username!"); } this.protocol = protocol; this.username = username; this.password = password; this.host = host; this.port = (port < 0 ? 0 : port); this.path = path; // trim the beginning "/" while(path != null && path.startsWith("/")) { path = path.substring(1); } if (parameters == null) { parameters = new HashMap(); } else { parameters = new HashMap(parameters); } this.parameters = Collections.unmodifiableMap(parameters); } 2、Dubbo配置实现原理

service 与 reference:service 与 reference 是 Dubbo 最基础的两个配置项,它们用来将某个指定的接口或实现类注册为 Dubbo 服务,并通过配置项控制服务的行为。service 用于服务提供者端,通过 service 配置的接口和实现类将被定义为标准的 Dubbo 服务,从而实现对外提供 RPC 请求服务。reference 用于服务消费者端,通过 reference 配置的接口将被定义为标准的 Dubbo 服务,生成的 proxy 可发起对远端的 RPC 请求。一个应用中可以配置任意多个 service 与 reference。

consumer 与 provider:当应用内有多个 reference 配置时,consumer 指定了这些 reference 共享的默认值,如共享的超时时间等以简化繁琐的配置,如某个 reference 中单独设置了配置项值则该 reference 中的配置优先级更高。当应用内有多个 service 配置时,provider 指定了这些 service 共享的默认值,如某个 service 中单独设置了配置项值则该 service 中的配置优先级更高。consumer 组件还可以对 reference 进行虚拟分组,不通分组下的 reference 可有不同的 consumer 默认值设定;如在 XML 格式配置中, 标签可通过嵌套在 标签之中实现分组。provider 与 service 之间也可以实现相同的效果。

二、Dubbo配置-基于XML配置实现

服务提供者-定义服务接口

public interface DemoService { String sayHello(String name); }

用 Spring 配置声明暴露服务

加载 Spring 配置

public class DemoServiceImpl implements DemoService { @Override public String sayHello(String name) { return "Hello " + name + ", response from provider: " + RpcContext.getContext().getLocalAddress(); } }

服务消费者-通过 Spring 配置引用远程服务

加载 Spring 配置,并调用远程服务

public class BasicConsumer { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/dubbo-demo-consumer.xml"); context.start(); DemoService demoService = (DemoService) context.getBean("demoService"); String hello = demoService.sayHello("world"); } } 三、Dubbo配置-基于注解(Annotation )实现

此种方式使用的比较少,基于注解可以快速的将程序配置无效多余的配置信息,包含提供者和消费者。但是这种方式有一个弊端就是有些时候配置信息并不是特别好找,需要查找问题时无法快速定位。

在 Dubbo Spring Boot 开发中,你只需要增加几个注解,并配置 application.properties 或 application.yml 文件即可完成 Dubbo 服务定义注解有 @DubboService、@DubboReference 与 EnableDubbo,其中 @DubboService 与 @DubboReference 用于标记 Dubbo 服务,EnableDubbo 启动 Dubbo 相关配置并指定 Spring Boot 扫描包路径。配置文件 application.properties 或 application.yml

@DubboService 注解:@Service 注解从 3.0 版本开始就已经废弃,改用 @DubboService,以区别于 Spring 的 @Service 注解定义好 Dubbo 服务接口后,提供服务接口的实现逻辑,并用 @DubboService 注解标记,就可以实现 Dubbo 的服务暴露

@DubboReference 注解:@Reference 注解从 3.0 版本开始就已经废弃,改用 @DubboReference,以区别于 Spring 的 @Reference 注解。@DubboReference 注解将自动注入为 Dubbo 服务代理实例,使用 demoService 即可发起远程服务调

@EnableDubbo 注解:@EnableDubbo 注解必须配置,否则将无法加载 Dubbo 注解定义的服务,@EnableDubbo 可以定义在主类上

四、Dubbo配置-基于API实现

此种方式使用的比较少,这种方式更适用于研发自由框架与Dubbo做深度集成。

通过 API 编码方式组装配置、启动 Dubbo、发布及订阅服务。此方式可以支持动态创建 ReferenceConfig/ServiceConfig,结合泛化调用可以满足 API Gateway 或测试平台的需要。

服务提供者:通过 ServiceConfig 暴露服务接口,发布服务接口到注册中心。

服务消费者:通过 ReferenceConfig 引用远程服务,从注册中心订阅服务接口。

Bootstrap API:通过 DubboBootstrap API 可以减少重复配置,更好控制启动过程,支持批量发布/订阅服务接口,还可以更好支持 Dubbo3 的应用级服务发现。

五、Dubbo配置项解析 组件名称描述范围是否必须配置application指定应用名等应用级别相关信息一个应用内只允许出现一个必选service声明普通接口或实现类为 Dubbo 服务一个应用内可以有 0 到多个 serviceservice/reference 至少一种reference声明普通接口为 Dubbo 服务一个应用内可以有 0 到多个 referenceservice/reference 至少一种protocol要暴露的 RPC 协议及相关配置如端口号等一个应用可配置多个,一个 protocol 可作用于一组 service&reference可选,默认 dubboregistry注册中心类型、地址及相关配置一个应用内可配置多个,一个 registry 可作用于一组 service&reference必选config-center配置中心类型、地址及相关配置一个应用内可配置多个,所有服务共享可选metadata-report元数据中心类型、地址及相关配置一个应用内可配置多个,所有服务共享可选consumerreference 间共享的默认配置一个应用内可配置多个,一个 consumer 可作用于一组 reference可选providerservice 间共享的默认配置一个应用内可配置多个,一个 provider 可作用于一组 service可选monitor监控系统类型及地址一个应用内只允许配置一个可选metrics数据采集模块相关配置一个应用内只允许配置一个可选sslssl/tls 安全链接相关的证书等配置一个应用内只允许配置一个可选method指定方法级的配置service 和 reference 的子配置可选argument某个方法的参数配置method的子配置可选 总结

本文先讲解Dubbo配置概述,了解Dubbo中的URL统一模型和Dubbo配置实现原理,在三种Dubbo配置中,主要是基于XML配置实现的,并附Dubbo配置项解析,基于Annotation实现和基于API实现简要了解即可。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3