为初学者准备的 Dubbo 入门教程

news2024/11/17 20:38:38

Dubbo

Dubbo 与 RPC 的关系

Dubbo 是一种开源的分布式服务框架,由阿里巴巴公司开发。它为应用程序提供高性能的 RPC(远程过程调用)通信和服务治理能力,让应用程序能够在分布式环境中快速构建高可靠性和可扩展性的服务。Dubbo 核心功能包括服务注册与发现、负载均衡、服务调用和容错能力等,适用于多种语言和多种异构环境的通信。Dubbo 采用阻塞 I/O 和线程池的方式来实现高并发,同时还支持多种协议和序列化格式的扩展。其生态系统日趋完善,用户社区活跃,被广泛应用于 Web 应用,企业级中间件,大数据等领域。

Dubbo 的核心

Dubbo 的核心包括了:

  • 远程通讯:Dubbo 提供了多种远程通讯协议,如 Dubbo 协议、Http 协议、RMI 协议等。其中,Dubbo 协议是 Dubbo 自带的一种二进制、高性能的 RPC 通讯协议,具有较低的序列化和反序列化开销,适合高并发、大数据量的服务通讯。
  • 集群容错:当 Dubbo 消费者发起服务调用时,Dubbo 提供了多种集群容错策略,如 Failover、Failfast、Failsafe、Failback 等。Failover 是 Dubbo 的默认集群容错策略,其会在服务提供者出错或超时时自动切换到其他可用节点进行调用,保证调用的可靠性。
  • 自动发现:为了便于管理众多的服务提供者,Dubbo 提供了注册中心作为服务注册与发现的中心化管理工具。Dubbo 支持多种注册中心,如 ZooKeeper、Redis、Consul、Etcd 等。通过注册中心,服务消费者可以自动发现可用的服务提供者,而无需手动配置服务提供者地址,大大降低了服务调用的复杂度。

Dubbo 和 Spring Cloud区别

Dubbo 是一个高性能的 RPC 框架,主要用于构建微服务架构下的服务治理和服务通信。它可以非常方便地扩展服务,提高系统的性能和可扩展性。

Spring Cloud 是一个完整的微服务框架,它提供了一整套微服务框架的解决方案,包括服务注册与发现、配置中心、负载均衡、断路器、路由等等,比 Dubbo 更为全面。

深入了解:微服务框架对比:Spring Cloud vs Dubbo

Dubbo 的节点

  • Provider:发布服务,并将服务注册到注册中心,等待消费者调用。
  • Consumer:从注册中心订阅服务,和服务提供者进行通信,消费服务。
  • Registry:记录服务提供者的信息,以及服务提供者和服务消费者之间的关系,帮助消费者发现可用的服务实例。
  • Monitor:收集 Dubbo 节点的性能指标、服务调用统计信息等,以便运维人员进行监控和管理。
  • Container:服务的运行容器

Dubbo 的框架

Dubbo 的框架 包括了:

  • 单一应用框架:适用于流量较小的时候
  • 垂直应用框架:适用与流量较大的时候
  • 分布式服务架构:适用于垂直应用架构较多的时候
  • 流动计算架构:当流量超级大的时候,需要一个调度中心

Dubbo 服务

Dubbo 接口定义

我们可以写一个 sayHello 的方法。

/** * xml方式服务提供者接口 */ public interface ProviderService { String SayHello(String word); }

接着,定义它的实现类。

/** * xml方式服务提供者实现类 */ public class ProviderServiceImpl implements ProviderService{ public String SayHello(String word) { return word; } }

然后,导入 maven 依赖。

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ouyangsihai</groupId> <artifactId>dubbo-provider</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- https: //mvnrepository.com/artifact/com.alibaba/dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.6</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.10</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.5</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.32.Final</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.8.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.8.0</version> </dependency> </dependencies> </project>

发布 Dubbo 接口

接口写完之后,需要进行接口的发布,这样才能访问到此接口。

package com.sihai.dubbo.provider; import com.alibaba.dubbo.config.ApplicationConfig; import com.alibaba.dubbo.config.ProtocolConfig; import com.alibaba.dubbo.config.RegistryConfig; import com.alibaba.dubbo.config.ServiceConfig; import com.alibaba.dubbo.container.Main; import com.sihai.dubbo.provider.service.ProviderService; import com.sihai.dubbo.provider.service.ProviderServiceImpl; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.io.IOException; /** * xml方式启动 * */ public class App { public static void main( String[] args ) throws IOException { //加载xml配置文件启动 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/provider.xml"); context.start(); System.in.read(); // 按任意键退出 } }

启动 Dubbo 服务

最后就是启动 Dubbo 服务,看到以下 log,说明启动成功。

知识扩展:

  • 分布式 RPC 框架比较:dubbo、dubbox、motan、thrift、grpc
  • 深入理解 Dubbo:原理和机制详解

 

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

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

相关文章

信道的容量和复用

信道的极限容量 当信道质量比较差时&#xff0c;输出信号的波形难以识别&#xff0c;此时出现的现象称为码间串扰“ 失真的因素有&#xff1a;码元传输速率&#xff0c;信号传输距离&#xff0c;噪声干扰&#xff0c;传输媒体质量等。 奈奎斯特准则&#xff1a; 理想低…

18.Lucas-Kanade光流及OpenCV中的calcOpticalFlowPyrLK

文章目录 光流法介绍OpenCV中calcOpticalFlowPyrLK函数补充reference 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 光流法介绍 光流描述了像素在图像中的运动&#xff0c;就像彗星☄划过天空中流动图像。同一个像素&#xff0c;随着时…

机器学习与深度学习——利用随机梯度下降算法SGD对波士顿房价数据进行线性回归

机器学习与深度学习——利用随机梯度下降算法SGD对波士顿房价数据进行线性回归 我们这次使用随机梯度下降&#xff08;SGD&#xff09;算法对波士顿房价数据进行线性回归的训练&#xff0c;给出每次迭代的权重、损失和梯度&#xff0c;并且绘制损失loss随着epoch变化的曲线图。…

集群 第四章

目录 1. nginx、lvs、haproxy 的区别 2. 实验 3. ssh 升级 4.总结 1. nginx、lvs、haproxy 的区别 2. 实验 Haproxy 服务器&#xff1a;192.168.83.101 Nginx 服务器1&#xff1a;192.168.83.102 Nginx 服务器2&#xff1a;192.168.83.103 …

Mysql之视图,索引及数据的备份与恢复

目录 一、视图 1.视图是什么 2.视图与数据表的区别 3.视图的优缺点 优点&#xff1a; 缺点&#xff1a; 4.视图的应用场景 5.语法运用 二、索引 1.什么是索引 2.为什么要使用索引 3.使用索引的优缺点 4.何时不使用索引 5.索引何时失效 6.索引分类 三、数据的备份…

头结点到底方便了啥?

头结点到底方便了啥&#xff1f; 链表增加头结点的作用如下&#xff1a; (1)便于首元结点的处理 (2)便于空表和非空表的统一处理 (参考&#xff1a;《数据结构 C语言(第2版)》P31) 其实这两句话很抽象&#xff0c;你说方便就方便&#xff0c;你倒是举个粟子或者画个图什么的啊&…

Linux开发工具之vim工具的使用介绍

目录 前言 1.vim的基本概念 命令模式(Normal mode) 插入模式(Insert mode) 末行模式(last line mode) 2.vim的基本操作 命令模式的命令集 移动光标 ​编辑 删除文字 复制 替换 撤销操作 更改 vim末行模式命令集 简单vim配置 总结 前言 大家好呀&#xff0c;许久…

Java动态规划LeetCode1137. 第 N 个泰波那契数

方法1&#xff1a;通过动态规划解题&#xff0c;这道题也是动态规划的一道很好的入门题&#xff0c;因为比较简单和容易理解。 代码如下&#xff1a; public int tribonacci(int n) {//处理特殊情况if(n0){return 0;}if(n1||n2){return 1;}//定义数组int[]dpnew int[n1];//初…

浏览器通过js打开文件,新建文件,静默实时保存文件

资源&#xff0c;点击下载 在线访问Txt Markdown &#x1f61d;&#x1f61d;&#x1f61d;&#x1f61d;&#x1f61d;&#x1f61d; 新建文件后&#xff0c;可以直接保存文件&#xff0c;不需要再次下载文件&#xff0c;也只有第一次保存时候才会出现确认弹窗 html <!D…

尚硅谷React学习笔记(上)

目录 一、React入门 1.1、React简介 为什么要学&#xff1f; React的特点 1.2、React的基本使用 Hello React案例 创建虚拟DOM的两种方式 虚拟DOM与真实DOM 1.3、React JSX 语法规则 JSX小练习 1.4、模块与组件化的理解 模块 组件 模块化 组件化 二、React面向…

E. Scuza - 二分+前缀和

分析&#xff1a; 暴力会超时&#xff0c;可以用二分&#xff0c;构建两个数组&#xff0c;一个是a[i]&#xff0c;作为前缀和数组&#xff0c;一个是f[i]表示第i个台阶之前的最大高度的台阶&#xff0c;然后每次二分来查找k&#xff0c;因为尽可能地走的多&#xff0c;所以查找…

VTK STL 体积 表面积测量 最短路径 读取中文路径

目录 开发环境&#xff1a; vtkMassProperties 三、中文路径 数据读取 开发环境&#xff1a; 系统&#xff1a;Win10 VTK&#xff1a;8.2.0 Qt&#xff1a;5.12.4 一、结构化对象 体积 面积 vtkMassProperties VTK 计算体积和面积的主要类 vtkMassProperties vtkSm…

C语言进阶之指针的进阶

指针的进阶 1. 字符指针2. 指针数组3. 数组指针3.1 数组指针的定义3.2 &数组名VS数组名3.3 数组指针的使用 4. 数组参数、指针参数4.1 一维数组传参4.2 二维数组传参4.3 一级指针传参4.4 二级指针传参 5. 函数指针6. 函数指针数组7. 指向函数指针数组的指针8. 回调函数9. 指…

【程序员必须掌握的算法】【Matlab】GRNN神经网络遗传算法(GRNN-GA)函数极值寻优——非线性函数求极值

上一篇博客介绍了BP神经网络遗传算法(BP-GA)函数极值寻优——非线性函数求极值&#xff0c;神经网络用的是BP神经网络&#xff0c;本篇博客将BP神经网络替换成GRNN神经网络&#xff0c;希望能帮助大家快速入门GRNN网络。 1.背景条件 要求&#xff1a;对于未知模型&#xff08;…

使用trtexec工具多batch推理tensorrt模型(trt模型)

文章目录 零、pt转onnx模型一、onnx转trt模型二、推理trt模型 零、pt转onnx模型 参考&#xff1a;https://github.com/ultralytics/yolov5 用根目录下的export.py可以转pt为onnx模型&#xff0c;命令如下可以转换成动态batch的onnx模型 python3 export.py --weights./yolov5s…

一款强大易用的截图控件:跨平台,界面简洁,功能丰富,易于集成

当我们在日常工作中沟通交流&#xff0c;或是在开发过程中跟踪反馈问题时&#xff0c;截图无疑是一种最直观有效的方式。然而&#xff0c;传统的截图工具在功能上的局限性&#xff0c;往往无法满足我们日益增长的需求。这时&#xff0c;一款功能强大&#xff0c;易于集成&#…

垃圾收集算法和CMS详解

一、垃圾收集算法 1、分带收集理论 基于新生代和老年代选择不同垃圾回收算法&#xff0c;比如新生代&#xff0c;都是一些暂存对象&#xff0c;而且内存分区域的&#xff0c;可以采用标记复制算法。而老年代只有一块内存区域&#xff0c;使用复制算法比较占用内存空间&#x…

DEVICENET转ETHERCAT网关连接ethercat通讯协议详细解析

你有没有遇到过生产管理系统中&#xff0c;设备之间的通讯问题&#xff1f;两个不同协议的设备进行通讯&#xff0c;是不是很麻烦&#xff1f;今天&#xff0c;我们为大家介绍一款神奇的产品&#xff0c;能够将不同协议的设备进行连接&#xff0c;让现场的数据交换不再困扰&…

MySQL数据库 - 库的操作

目录​​​​​​​ 一、创建数据库 二、创建数据库案例 三、字符集和校验规则 四、校验规则对数据库的影响 五、操纵数据库 1、查看数据库 2、显示创建语句 3、修改数据库 4、删除数据库 六、数据库的备份与恢复 1、数据库的备份 2、数据库的恢复 3、表的备份 4…

【网络系统集成】Pfsense防火墙实验

1.实验名称 Pfsense防火墙实验 2.实验目的 通过动手实践配置pfsense对加深对防火墙的原理与应用的理解。 3.实验内容 (1)安装并完成pfsense防火墙软件的基本配置(WAN, LAN,局域网