当前位置: 首页 > news >正文

Dubbo技术栈沉淀

作为开发者,我们应该理解,和认识dubbo的哪些特征,
才算了解和使用Dubbo

这篇写的不是特别深刻,回头在写一篇深刻一点的

1.dubbo是什么
2.dubbo如何引入,配置到springboot,有哪些领域dubbo可以配置
3.在代码层面,应该如何配置dubbo

要理解和使用 Dubbo,可以从以下三个核心问题入手:它是什么、如何配置、以及如何通过代码实现服务调用。下面是一个清晰的路线图,将概念、配置和编码实践串联起来。

1. Dubbo是什么:一个高性能的RPC与服务治理框架

简单来说,Dubbo是一个用于构建微服务或分布式应用的Java框架。它解决的核心问题是让一台服务器上的程序能够像调用本地方法一样,去调用另一台服务器上的程序,这被称为RPC。

除了基础的远程调用,Dubbo还提供了丰富的服务治理能力,主要包括:

  • 服务自动发现与注册:服务提供者启动后会自动注册到注册中心(如Zookeeper、Nacos),消费者从注册中心动态获取服务地址,无需写死IP。
  • 智能负载均衡:当服务提供者有多个实例时,Dubbo内置了加权随机、轮询、最少活跃调用等策略来分发请求。
  • 集群容错:提供了失败重试、快速失败、失败安全等多种容错策略,提升系统局部故障时的可用性。
  • 高度可扩展:基于微内核+插件化的SPI机制,你可以方便地扩展协议、序列化、路由等核心组件。

2. 如何引入与配置Dubbo:重点在集成Spring Boot

在现代Spring Boot项目中,引入Dubbo非常方便。你只需要添加对应的"Starter"依赖,并在配置文件(如application.yml)中进行核心配置。

如何引入

pom.xml中,你需要引入一个核心Starter,以及一个与你选择的注册中心和配置中心对应的Starter。

<dependencyManagement><dependencies><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-bom</artifactId><version>3.3.0</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- Dubbo Spring Boot Starter --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><!-- 以Nacos作为注册中心为例 --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-nacos-spring-boot-starter</artifactId></dependency></dependencies>
有哪些领域可以配置

Dubbo的配置项非常丰富,主要用于定义应用、注册中心、协议和服务的核心行为。在application.yml中,主要集中在dubbo前缀下。

dubbo:application:name:dubbo-demo-provider# 应用名,必填registry:address:nacos://127.0.0.1:8848# 注册中心地址,必填protocol:name:tri# 协议名称,推荐使用tri,性能好且兼容gRPCport:50051# 监听端口provider:timeout:3000# 服务级别默认超时时间retries:1# 失败重试次数consumer:check:false# 启动时是否检查依赖的服务提供者

3. 代码层面如何配置:核心注解是@DubboService@DubboReference

在编码层面,主要使用两个核心注解来发布和引用服务。

步骤一:定义服务接口

首先,定义一个标准的Java接口,这个接口需要被服务提供者和消费者共享(通常放在一个独立的api模块中)。

packagecom.example.dubbo.api;publicinterfaceDemoService{StringsayHello(Stringname);}
步骤二:服务提供者实现并暴露服务

在服务提供者一方,实现上述接口,并使用@DubboService注解将其暴露为Dubbo服务。

packagecom.example.dubbo.provider;importcom.example.dubbo.api.DemoService;importorg.apache.dubbo.config.annotation.DubboService;importorg.springframework.stereotype.Component;// @DubboService注解会将此Bean发布为一个Dubbo服务@DubboService@ComponentpublicclassDemoServiceImplimplementsDemoService{@OverridepublicStringsayHello(Stringname){return"Hello "+name;}}
步骤三:服务消费者引用并调用服务

在服务消费者一方,使用@DubboReference注解注入远程服务代理,然后就可以像调用本地方法一样直接调用。

packagecom.example.dubbo.consumer;importcom.example.dubbo.api.DemoService;importorg.apache.dubbo.config.annotation.DubboReference;importorg.springframework.stereotype.Component;@ComponentpublicclassTask{// @DubboReference注解会创建一个远程调用的代理对象@DubboReferenceprivateDemoServicedemoService;publicvoiddoSomething(){// 像调用本地方法一样调用远程服务Stringresult=demoService.sayHello("World");System.out.println("Dubbo Remote Result: "+result);}}
启动类

最后,别忘了在Spring Boot启动类上加上@EnableDubbo注解,以启用Dubbo的注解驱动功能。

@SpringBootApplication@EnableDubbopublicclassProviderApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ProviderApplication.class,args);}}

进阶:版本号与分组

在生产环境中,为了平滑升级或服务隔离,版本号分组是必不可少的概念。通过它们,你可以唯一地确定一个服务。

  • 版本隔离:当服务需要升级但不兼容时,可以为新老服务设置不同的version

    • 提供者:@DubboService(version = "2.0.0")
    • 消费者:@DubboReference(version = "2.0.0")
  • 分组隔离:用于区分同一接口的不同业务实现,例如同一个服务的多个机房或测试环境。

    • 提供者:@DubboService(group = "beijing")
    • 消费者:@DubboReference(group = "beijing")

如果不指定,Dubbo会默认使用空字符串作为groupversion

http://www.jsqmd.com/news/720567/

相关文章:

  • 如何用Winhance中文版一键优化你的Windows系统:终极性能提升指南
  • 一文读懂:海上钻井平台是什么?为什么能浮在海上?它到底怎么采石油?
  • 表单验证:React-Hook-Form结合Zod的实践
  • 城通网盘直连解析工具:三步告别限速困扰
  • LongCat-Image-Editn实战:上传图片输入中文指令,轻松修改图片内容
  • C语言标准库入门讲解
  • Phi-3.5-mini-instruct跨境电商:商品描述多语言生成+合规文案审核
  • 高效自动化设计转动画:AEUX专业级一站式解决方案
  • 5步搭建你的跨平台音乐中心:MusicFree插件系统完全指南
  • 如何安全定制iOS界面:Cowabunga Lite终极指南与免费个性化教程
  • DbGate终极指南:如何快速连接和管理MySQL数据库的完整教程
  • PPTist:5分钟上手免费开源在线PPT制作工具完全指南
  • Windows热键冲突完全手册:精准定位与彻底解决指南
  • 前端防抖、节流
  • 3种技术概念验证方法:如何确保你的SHAP解释真正可靠?
  • python bandit
  • 别再让模型‘偏爱’多数类了:PyTorch中BCEWithLogitsLoss的weight和pos_weight参数实战指南
  • 量子编程语言:Q#与Qiskit框架的使用对比
  • ComfyUI IPAdapter完整指南:从零开始掌握AI图像风格迁移
  • FigmaCN中文插件:3分钟快速实现Figma界面汉化的完整指南
  • X-13ARIMA-SEATS时间序列季节调整软件的编译和使用
  • 答辩前三天才做 PPT?Paperxie AI PPT,把毕业论文答辩的焦虑全碾碎
  • 2026卫生专业技术资格考试考前押题卷TOP榜!冲刺提分必刷密卷测评 - 医考机构品牌测评专家
  • 小米手机录音机‘吃’掉了我的文件?深入Android/data/com.android.soundrecorder的完整避坑指南
  • 如何用300元预算打造专业级天文望远镜控制系统?OnStep开源方案全解析
  • 3个核心功能+5分钟部署:WarcraftHelper魔兽争霸III终极兼容性解决方案
  • UDS诊断进阶:拆解0x2C动态定义DID的三种用法与五大常见NRC应对策略
  • 构建生产级AI聊天机器人:PHP 9.0异步HTTP/2流式调用OpenAI + 自研RAG缓存层(仅需23行核心代码)
  • JBoltAI智能报价系统:从手工核算到标准化闭环
  • 思源宋体CN字体应用实战:3个关键场景提升你的设计效率