你项目用到了 Dubbo,讲讲为什么要用以及怎么使用的?

引言:在现代分布式系统中,服务化架构已成为构建高性能、可扩展和可靠系统的关键。 Dubbo 作为一种优秀的服务化框架,提供了丰富的特性和灵活的配置选项,使得它在业界得到了广泛的应用和认可。本文将探讨为什么选择 Dubbo 以及如何在项目中使用 Dubbo 的相关内容。

题目

你项目用到了 Dubbo,讲讲为什么要用以及怎么使用的?

推荐解析

为什么要用 Dubbo?

为什么要用,其实就是 Dubbo 功能有哪些,以及你项目中由于业务所要使用到它的某些特性,因此在技术选型后,确定使用 Dubbo 框架。

1)服务注册与发现:

服务提供者在启动时将服务注册到注册中心,服务消费者可以从注册中心发现服务提供者的地址信息。

2)负载均衡:

Dubbo 内置了多种负载均衡策略,如随机、轮询、最少活跃调用等,用于在多个服务提供者之间分配请求。

3)服务调用:

支持同步调用和异步调用,以及回调机制,以满足不同的服务调用需求。

4)集群容错:

包括失败重试、快速失败、故障转移等策略,提高系统的可用性和容错能力。

5)服务监控:

提供服务调用次数、调用时间等统计信息,方便开发者监控服务状态。

6)服务降级:

在服务不可用时,提供备选方案,例如返回默认值或缓存数据,以保证核心业务的可用性。

7)服务治理:

包括服务分组、版本控制、动态配置等,帮助开发者更好地管理服务。

8)安全性:

支持服务权限控制、数据加密和安全认证,保障服务通信的安全性。

9)多协议支持:

Dubbo 支持多种通信协议,如 Dubbo 协议、RMI 协议、HTTP 协议等,以适应不同的通信场景。

10)多注册中心支持:

支持与多种注册中心(如 ZooKeeper、Redis、Multicast)集成,提供服务注册和发现的功能。

简单 Dubbo 举例使用

1. 引入 Dubbo 依赖

首先,在你的 Java 项目中引入 Dubbo 相关的依赖。

Maven 依赖配置

pom.xml 文件中添加 Dubbo 的依赖:

<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.0.9</version> <!-- 可以根据最新版本进行调整 -->
</dependency>
2. 编写 Dubbo 服务接口

定义 Dubbo 的服务接口和相关的数据模型。

定义服务接口

// 服务接口
public interface HelloService {String sayHello(String name);
}
3. 实现 Dubbo 服务提供者

编写具体的服务实现类,实现 Dubbo 的服务接口。

实现服务接口

// 服务提供者实现类
@Service(version = "1.0.0")
public class HelloServiceImpl implements HelloService {@Overridepublic String sayHello(String name) {return "Hello, " + name;}
}
4. 配置 Dubbo 服务提供者

在 Spring Boot 的配置文件中配置 Dubbo 服务提供者的相关信息。

application.properties 配置

# Dubbo 应用名
dubbo.application.name=my-dubbo-provider
# Dubbo 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# Dubbo 服务协议
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
5. 启动 Dubbo 服务提供者

编写一个启动类,用于启动 Dubbo 服务提供者。

@SpringBootApplication
public class DubboProviderApplication {public static void main(String[] args) {SpringApplication.run(DubboProviderApplication.class, args);}
}
6. 编写 Dubbo 服务消费者

在另一个项目或模块中,编写 Dubbo 的服务消费者。

@RestController
public class HelloController {@Reference(version = "1.0.0")private HelloService helloService;@GetMapping("/hello")public String sayHello(@RequestParam String name) {return helloService.sayHello(name);}
}
7. 配置 Dubbo 服务消费者

在消费者项目中配置 Dubbo 的消费者相关信息。

application.properties 配置

# Dubbo 应用名
dubbo.application.name=my-dubbo-consumer
# Dubbo 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
8. 启动 Dubbo 服务消费者

同样编写一个启动类,用于启动 Dubbo 服务消费者。

@SpringBootApplication
public class DubboConsumerApplication {public static void main(String[] args) {SpringApplication.run(DubboConsumerApplication.class, args);}
}
9. 运行与测试

现在你可以启动 Dubbo 提供者和消费者应用程序,并测试 Dubbo 服务是否正常工作。

1)启动提供者应用程序(DubboProviderApplication)。

2)启动消费者应用程序(DubboConsumerApplication)。

3)访问消费者的接口,如 http://localhost:8080/hello?name=John,应该能够看到返回的结果。

Dubbo 使用的是什么通信框架?

1)Netty:

Dubbo 在其通信层使用了 Netty 作为底层的网络通信框架,Netty 是一个高性能的网络编程框架。

2)TCP/IP 协议:

Dubbo 通信框架基于 TCP/IP 协议栈,保证了网络通信的可靠性和效率。

3)序列化框架:

Dubbo 支持多种序列化方式,如 Hessian、Java 自身的序列化机制等,用于对象的网络传输。

4)动态代理机制:

通过使用 JDK 的动态代理或 CGLIB 库,Dubbo 实现了客户端对服务的透明调用。

5)多线程模型:

Dubbo 在服务提供者和消费者两端都采用了多线程模型来处理并发请求。

6)异步通信:

Dubbo 支持异步调用模式,允许服务消费者和提供者进行非阻塞的数据处理。

7)长连接和心跳机制:

为了减少频繁建立和关闭连接的开销,Dubbo 使用长连接和心跳机制来维护服务端和客户端之间的连接。

8)请求-响应模式:

Dubbo 的通信框架基于请求-响应模式,客户端发送请求并等待服务端的响应。

API 项目面试题

为什么使用RPC调用?有了解过其他的方式吗?为什么不用OpenFegin?

答:因为如果在网关引入数据库的操作的话,不仅会增加项目体积,以及违背了设计原则的单一职
责原则,所以我考虑通过服务间调用的方式,我了解过有两种方式,第一种是Open feign,原理是
构造了一个HTTP请求,并会添加很多的请求头,body是使用json字符串传输,所以调用效率会比
较低,更加适合外部服务间的调用。然后我了解到RPC是可以基于TCP协议,避免了无用的请求
头,以及可以通过将数据序列化为二进制流的形式传输,效率更加高效,更加安全,所以更适用于
我这个场景。最终我选择了Dubbo RPC框架来实现这个功能。

其他补充

鱼聪明 AI 的回答:

鱼聪明 AI 地址:https://www.yucongming.com/

Dubbo

优点:

  1. 高性能: Dubbo 在设计上注重性能,采用了简单的远程调用方式和高效的序列化机制。
  2. 服务治理: 提供了丰富的服务治理功能,包括负载均衡、容错机制(如熔断、降级)、服务路由等,适合复杂的分布式场景。
  3. 支持多协议: Dubbo 支持多种通信协议,如 Dubbo 协议、HTTP、RMI 等,能够灵活适配不同的应用需求。
  4. 对中小型公司友好: 简单易用,适合中小型公司快速构建微服务架构。

缺点:

  1. 生态相对狭窄: 相对于 Spring Cloud,Dubbo 的生态系统相对较小,周边工具和支持资源可能不如 Spring Cloud 那么丰富。
  2. 对 Spring 依赖较重: 尽管 Dubbo 可以与非 Spring 框架集成,但在 Spring 生态圈内的集成更为顺畅。

Spring Cloud

优点:

  1. 丰富的组件: Spring Cloud 提供了丰富的组件和工具,如服务注册与发现(Eureka、Consul)、服务调用(Feign、RestTemplate)、断路器(Hystrix)、配置管理(Spring Cloud Config)等。
  2. 强大的生态系统: Spring Cloud 构建在 Spring 生态系统之上,能够充分利用 Spring Boot 的便利性和成熟的技术栈。
  3. 广泛的支持和社区: 由于其流行度和开放性,Spring Cloud 拥有庞大的社区支持和文档资源,能够解决各种复杂场景下的需求。

缺点:

  1. 复杂性: Spring Cloud 提供了大量的组件和配置选项,可能会导致学习曲线较陡。
  2. 性能开销: 由于提供了更多的功能和灵活性,Spring Cloud 在性能方面可能不如 Dubbo 高效。

选择场景和建议

  • 性能要求高、对服务治理有较高需求的场景,推荐使用 Dubbo。
  • Spring 生态系统已经深度依赖、需要较多集成支持的场景,推荐使用 Spring Cloud。
  • 初创公司或者中小型公司,对性能要求不是特别高,但需要快速搭建微服务架构的场景,可以考虑 Dubbo 或者 Spring Cloud 的简化版本(如 Spring Cloud Alibaba)。

综上所述,选择 Dubbo 还是 Spring Cloud 取决于项目需求、团队经验以及对生态系统的依赖程度。

欢迎交流

本文主要介绍 Dubbo 的主要功能以及简单使用,对于项目的面试题也已经回答,可以去记一些关键词方便记忆,在文末还有三个问题,检验本篇文章的学习成功,欢迎小伙伴在评论区留言!近期面试鸭小程序已全面上线,想要刷题的小伙伴可以积极参与!

1)Dubbo 的主要优势是什么?它与其他 RPC 框架相比的特点是什么?

2)Dubbo 如何处理服务注册和发现?它支持哪些注册中心和负载均衡策略?

3)Dubbo 在集群容错方面有哪些机制?它如何处理服务调用失败或超时的情况?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaEE大作业之班级通讯录系统(前端HTML+后端JavaEE实现)PS:也可选网络留言板、图书借阅系统、寝室管理系统

背景&#xff1a; 题目要求&#xff1a; 题目一&#xff1a;班级通讯录【我们选这个】 实现一个B/S结构的电子通讯录&#xff0c;其中的每条记录至少包含学号、姓名、性别、班级、手机号、QQ号、微信号&#xff0c;需要实现如下功能&#xff1a; &#xff08;1&#xff09;…

Objective-C基础语言开发来袭,你准备好了吗?

文/ZaiZai 前言 今天小白电脑技术的公众号迎来了一位Objective-C语言开发大神——ZaiZai。接下来有想要学习写插件&#xff08;iOS/macOS/iPadOS/tvOS&#xff09;的小伙伴可以关注微信公众号&#xff0c;教程将持续更新。 ZaiZai个人介绍……呃……他不让放。 Objective-C…

AI早班车6.13

全球AI新闻速递 1.Yandex 开源模型训练工具“YaFSDP”&#xff0c;提升 GPU 利用率。 2.全天候激光智能除草机器人落地&#xff0c;环境零污染。 3.苹果2024开发者大会-Siri 更智能。 4.CampusAI筹集1000万美元种子资金&#xff0c;创建虚拟校园用于学习AI技能。 5.OpenAI&…

C语言详解(预编译)

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

什么是DMZ?路由器上如何使用DMZ?

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 DMZ 📒🚀 DMZ的应用场景💡 路由器设置DMZ🎈 注意事项 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 在网络管理中,DMZ(Demilitarized Zone,隔离区)是一个特殊的网络区域,常用于将公共访问和内部网络隔离开来。DMZ功能允许…

遇到JSON文件就头大?掌握Python这几种方法,让你轻松应对

目录 1、标准库json模块 📄 1.1 json.load()函数介绍 1.2 json.loads()处理字符串 1.3 使用json.dump()写入JSON 1.4 json.dumps()美化输出 1.4 错误处理与编码问题 1.5 高效读取大文件技巧 2、第三方库simplejson加持 🔧 2.1 安装与导入simplejson 2.2 性能优势与…

解决css文本内容为符号不会换行问题

错误样式如上&#xff0c;超出了规定的文本区域。 在css上增加word-wrap: break-word;即可。

电商价格监测对于品牌渠道管控的重要性

当品牌开启经销渠道或涉足电商渠道时&#xff0c;必须着手进行线上线下价格监测。只有监控到电商价格&#xff0c;才能明晰出货后的商品历经多轮市场演绎后的实际价格&#xff0c;进而了解市场需求下的真实低价行为。借助力维网络开发的电商价格监测系统&#xff0c;品牌商能知…

uni-app利用renderjs实现安卓App上jssip+freeswitch+webrtc音视频通话功能

效果图 前置知识 利用renderjs在app端加载for web库 JsSIPFreeSwitchVue实现WebRtc音视频通话 原始模块 <template><viewclass"test-sip":userExtension"userExtension":change:userExtension"JsSIP.handleUserExtenSionChange":tar…

Python邮箱发送如何设置?Python发信方法?

Python邮箱发送邮件需要哪些库&#xff1f;怎么使用Python发信&#xff1f; Python的强大之处在于其丰富的库和模块&#xff0c;使得开发者可以轻松地实现各种功能&#xff0c;包括通过电子邮件发送信息。AokSend将介绍如何在Python中设置和发送电子邮件&#xff0c;以及相关的…

超高频载码体有哪些特点?

载码体由线圈、已编程的芯片&#xff0c;以及电池(在有源读写系统中)组成&#xff0c;具有唯一的电子编码&#xff0c;拥有大容量的存储空间&#xff0c;通常附着于产品载体乃至是产品本身&#xff0c;成为一个随产品移动的移动数据库&#xff0c;可以帮助企业更好的物料、成品…

AH8652:220V转5V非隔离电源芯片

### AH8652&#xff1a;220V转5V非隔离电源芯片&#xff0c;高效转换新选择 #### 引言 随着电子设备对电源稳定性和安全性要求的提高&#xff0c;非隔离电源转换芯片因其简单、高效和成本效益而受到市场的欢迎。AH8652是一款专为220V转5V设计的非隔离电源芯片&#xff0c;以其…

Ubuntu安装Protobuf

以前的版本中&#xff0c;有./configure&#xff0c;所以参照下面的博客链接 Ubuntu安装Protobuf&#xff0c;指定版本_ubuntu更新protobuf-CSDN博客 后来的版本中&#xff0c;没有了./configure文件&#xff0c;需要安装bazel,参照下面的官网链接 protobuf/src/README.md a…

基于 Redis 实现分布式缓存

一、单节点 Redis 的问题 1.1 存在的问题 1、数据丢失问题&#xff1a;Redis 是内存存储&#xff0c;服务重启可能会丢失数据。 2、并发能力问题&#xff1a;单节点 Redis 并发能力虽然不错&#xff0c;但也无法满足如 618 这样的高并发场景。 3、故障恢复问题&#xff1a;如果…

实践分享:鸿蒙跨平台开发实例

先来理解什么是跨平台 提到跨平台&#xff0c;要先理解什么是“平台”&#xff0c;这里的平台&#xff0c;就是指应用程序的运行环境&#xff0c;例如操作系统&#xff0c;或者是Web浏览器&#xff0c;具体的像HarmonyOS、Android、iOS、或者浏览器&#xff0c;都可以叫做平台…

用于云医疗图像的缩略图保持加密方案

论文标题&#xff1a;《Data hiding with thumbnail-preserving encryption for cloud medical images》&#xff0c;作者提出了一种用于云医疗图像的可逆数据隐藏方案&#xff0c;同时保留了缩略图。下面是论文的创新点和算法过程的总结。 一、缩略图保持加密与传统图像加密 …

GD32 MCU超频后无法再次下载程序的解决办法

我们知道&#xff0c;MCU的系统时钟主频就相当于人的心跳或脉搏&#xff0c;为所有的工作单元提供时间基数&#xff0c;所以一般在程序最开始的地方都需要进行主频配置。 GD32固件库中提供了多种宏定义&#xff0c;可以很方便的将系统时钟配置为想要的频率。 GD32固件库中所用…

AI宣传文案软件有哪些?5款AI软件推荐

AI宣传文案软件有哪些&#xff1f;AI宣传文案软件在现代营销和创意产业中扮演着越来越重要的角色&#xff0c;它们凭借先进的自然语言处理、机器学习和深度学习技术&#xff0c;不仅解放了创作者的双手&#xff0c;还大大提升了文案的生成效率和质量。这些软件能够精准捕捉用户…

python快速入门之Flask框架

文章目录 一、pip安装二、接口开发三、测试 一、pip安装 pip install flask 二、接口开发 from flask import Flaskapp Flask(__name__)app.route("/test") def index():return "test"if __name__ __main__:app.run()三、测试 http://127.0.0.1:5000…

redis 08 慢查询日志

1.什么是慢查询日志 2.慢查询和两个参数有关 2.1 2.2 3.例子&#xff1a; 4 参数详细介绍&#xff1a;