第35周Zookkeeper+Dubbo Dubbo

Dubbo 详解

一、Dubbo 是什么

官网与定义

Dubbo 是一款高性能、轻量级的开源服务框架,其官网为 double.apache.org,提供中文版本(网址含 “zh”)。

核心能力

Dubbo 具备六大核心能力:

  1. 面向接口代理的高性能 RPC 调用 :RPC(Remote Procedure Call)即远程过程调用,允许一个服务请求另一个远程服务的能力,是 Dubbo 的核心。Dubbo 通过高性能 RPC 调用,实现服务间通信,通信协议可指定,默认用 Dubbo 协议,而非 HTTP。
  2. 智能容错和负载均衡 :针对调用而言,保障系统稳定性和高可用性。
  3. 服务自动注册与发现 :简化服务管理,方便服务提供方和消费方动态发现和调用服务。
  4. 高度可扩展能力 :满足不同业务场景需求。
  5. 运行流量调度 :优化服务调用过程中的流量分配。
  6. 可视化的服务治理与运维 :提升运维效率和管理水平。

这些能力均围绕 RPC 调用进行扩展或辅助,因此 Dubbo 的核心在于服务间的 RPC 调用,在多服务场景下,服务相互调用可考虑使用 Dubbo。

发展情况

Dubbo 最初由阿里巴巴内部开发,后捐赠给 Apache,期间经历维护中断,一些公司基于其自行维护衍生品,如当当的 Dubbo X。如今,Dubbo 支持多种语言,应用广泛,涵盖互联网公司(考拉、去哪儿等)和非互联网公司(中国电信、中国人寿等)。

二、RPC 介绍

概念及发展历程

RPC(远程过程调用)是服务间通信的一种方式。早期程序主要是内部方法调用,随着发展,出现同一台电脑内多个进程间调用需求,即进程间通信。进一步地,当需要调用的能力不在同一台电脑内时,便引入了 RPC(Remote Procedure Call)的概念。RPC 框架能方便实现远程调用,如 Dubbo,使得其他计算机或程序提供的服务被本地程序利用,加强系统间协作。

常见框架及对比

常见的 RPC 框架有:

  • 阿里 Dubbo 框架 :性能好,目前较为主流。
  • 新浪魔毯框架 :架构简单,适合初学者学习原理及源码,或作为开发小型 RPC 框架的参考。
  • Facebook Thrift 框架 :可伸缩跨语言框架,有强大代码生成引擎,支持多种语言,适用于跨语言通信场景。

选择框架需根据业务需求权衡,如团队技术栈统一且对性能要求高,可选 Dubbo;若需跨语言通信,Thrift 是不错选择;技术栈不统一时,HTTP 可能更合适。

HTTP 和 RPC 对比

对比 Dubbo 通信协议与 HTTP 协议:

  • 传输效率 :RPC 通常更高,因其协议无过多无用报文内容,无需转 json。
  • 通用性 :HTTP 更强,几乎被所有公司默认支持,联调首选;RPC 框架间兼容性差。
  • 负载均衡 :RPC 框架自带负载均衡策略,HTTP 需额外处理。

开发选择建议依据团队技术栈、语言需求及性能要求等因素综合考量。

三、Dubbo 工作原理

模块信息及架构

Dubbo 架构涉及以下模块:

  • provider :服务提供方,如商品服务提供查询商品详情能力。
  • consumer :服务消费方,调用远程服务获取所需能力。
  • registry :注册中心,用于服务注册与发现。
  • monitor :监控中心,监控调用次数、时间等数据。
  • container :服务运行时容器。

工作流程如下:

  1. 启动 container,provider 在其中运行并向注册中心注册。
  2. consumer 订阅服务信息,注册中心将地址提供给 consumer。
  3. consumer 获取信息后,直接调用对应 provider。
  4. consumer 和 provider 定期向 monitor 上报数据。

图中紫色虚线表示初始化过程,蓝色线(实线为同步调用,虚线为异步操作如通知和数据上报)表示其他操作。

四、项目开发流程

项目创建与配置

  1. 引入依赖 :在项目中引入 Dubbo 相关依赖,添加 Dubbo 特有的 @Service 注解。
  2. 指定注册中心 :整合 Dubbo 时,通常选 Zookeeper 作为注册中心,配置其地址以便 Dubbo 找到服务。
  3. 项目结构 :采用 spring cloud 课程结构,包含服务提供者(如课程列表)和服务调用者(如课程价格服务)两个模块,相互配合完成项目。

生产者开发

  1. 创建模块 :在 Idea 中新建 Maven 项目,删除原有 src 模块,新建子模块(如 producer),建立依赖关系。
  2. 编写代码 :在 producer 中创建包(如 com.imook.producer),包含 service 包定义接口(如 CourseListService)和实现类(如 CourseListServiceImpl),实现具体业务逻辑,如从数据库获取课程并展示。编写实体类(如 Course),继承 Serializable 接口,包含主键 ID、课程 ID、名称、是否上架等字段,引入 List 列表和 JAVA Util 工具类。
  3. 配置文件 :在 resources 新建 application.properties 配置文件,配置服务版本号、通信协议、端口号、注册地址等信息,指定 Dubbo 服务位置(如通过 dubbo.scan.base-packages)。

消费者开发

  1. 配置依赖 :消费者依赖配置与生产者基本一致,可复制生产者依赖配置并修改名称。
  2. 配置文件 :复制生产者配置文件,修改端口号(如 8084)和项目名称(如 course price)。
  3. 编写业务逻辑 :新建包(如 com.imook.consumer),复制 entity 和 dao 包,新建 service 包定义接口(如课程价格服务接口,含通过 ID 查找价格、获取课程列表并匹配价格等方法)及实现类(如 CoursePriceServiceImpl),在实现类中通过 @Reference 注解引入 Dubbo 服务,实现具体逻辑,如调用 Mapper 查询价格、获取课程列表并遍历匹配价格等。
  4. 控制器与启动类 :创建控制器,引入 service,实现具体功能如获取课程价格、课程名称和价格列表等。构建 Spring Boot 启动类,更换注解为 @SpringBootApplication 以对外暴露服务,并确保正确配置 Dubbo 相关内容。

注意事项

  1. ZooKeeper 启动 :消费者启动前必须确保 ZooKeeper 已启动,否则消费者找不到依赖服务会报错。
  2. 启动顺序 :生产者需先于消费者启动,让消费者能正常找到所依赖的服务,可通过配置关闭此检查。
  3. 注解选择 :区分 spring framework 和 Apache Dubbo 的库,正确选择 Dubbo 的 @Service 和 @Reference 注解,并指定版本,避免冲突。
  4. 配置细节 :生产者要正确配置协议、端口号、注册地址等信息,实体类需考虑驼峰配置,以确保下划线字段自动转换。

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

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

相关文章

NX二次开发——BlockUI 弹出另一个BlockUI对话框

最近在研究,装配体下自动导出BOM表格中需要用到BlockUI 弹出另一个BlockUI对话框。通过对网上资料进行整理总结,具体如下: 1、明确主对话框、子对话框1和子对话框2 使用BlockUI创建.cpp和.hpp文件,dlx文件内容如下所示 主对话框…

PostgreSQL 系统管理函数详解

PostgreSQL 系统管理函数详解 PostgreSQL 提供了一系列强大的系统管理函数,用于数据库维护、监控和配置。这些函数可分为多个类别,以下是主要功能的详细说明: 一、数据库配置函数 1. 参数管理函数 -- 查看所有配置参数 SELECT name, sett…

【2025软考高级架构师】——计算机网络(9)

摘要 全文主要围绕计算机网络相关知识展开,包括域名服务器查询方式、网络规划与设计的关键技术、双协议栈与隧道技术、层次化网络设计、网络冗余设计以及高可靠和高可用性等方面,旨在为软考高级架构师的备考提供知识参考。 1. 通信网络架构图 2. 通信架…

yolov8n-obb训练rknn模型

必备: 准备一台ubuntu22的服务器或者虚拟机(x86_64) 1、数据集标注: 1)推荐使用X-AnyLabeling标注工具 2)标注选【旋转框】 3)可选AI标注,再手动补充,提高标注速度 …

前端-HTML+CSS+JavaScript+Vue+Ajax概述

HTML&#xff08;超文本标记语言&#xff09;常见标签 <html><head> <title>这是标题的内容&#xff0c;显示在浏览器的头部</title></head><body><!-- 这里面的内容在浏览器显示给用户看 --><!-- h1 -> h6 : 标题从大到小 …

嵌入式软件--stm32 DAY 5 USART串口通讯(上)

前边我们学的都是通用的功能&#xff0c;例如GPIO、中断&#xff0c;现在我们要学习的是某一个特定的功能。典型的就是通讯功能。其中&#xff0c;最简单的通讯协议就是串口了。 一、串口_通讯基础知识 1.1 串行与并行 按数据传送的方式分类的。 串行通信一位一位传输&…

c++混淆工具Hikari-LLVM15-llvm-18.1.8rel编译安装

目录 1. windows 编译1. 2 编译工具安装1.2.1 下载w64devkit1.2.2 添加环境变量1.2.3 验证一下 1.3 下载llvm-18.1.8rel1.4 编译 2. Android studio增加混淆编译2.1 替换NDK中clang2.2 配置混淆编译项 3. Linux编译安装4. Linux下增加混淆编译4.1 在CMakeLists.txt中设置clang编…

【EasyPan】loadDataList方法及checkRootFilePid方法解析

【EasyPan】项目常见问题解答&#xff08;自用&持续更新中…&#xff09;汇总版 一、loadDataList方法概览 /*** 文件列表加载接口* param session HTTP会话对象* param shareId 必须参数&#xff0c;分享ID&#xff08;使用VerifyParam进行非空校验&#xff09;* param …

Vue3渲染引擎:虚拟DOM与响应式原理

Vue3渲染引擎&#xff1a;虚拟DOM与响应式原理 在当今的前端开发中&#xff0c;Vue.js作为一种流行的JavaScript框架&#xff0c;经常被用来构建用户界面。而Vue.js 3作为其最新版本&#xff0c;在性能和功能上进行了许多优化和改进。其中&#xff0c;Vue3渲染引擎的核心原理—…

【论文阅读】Attentive Collaborative Filtering:

Attentive Collaborative Filtering: Multimedia Recommendation with Item- and Component-Level Attention Attentive Collaborative Filtering (ACF)、隐式反馈推荐、注意力机制、贝叶斯个性化排序 标题翻译&#xff1a;注意力协同过滤&#xff1a;基于项目和组件级注意力的…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】2.1 数据查询基础(SELECT/WHERE/GROUP BY/HAVING)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 第2章 SQL语法进阶:数据查询基础(SELECT/WHERE/GROUP BY/HAVING)2.1 数据查询基础2.1.1 SELECT 语句:从表中提取数据2.1.1.1 基础语法与列选择2.1.1.2 列别名与表达式2.1.1.3 去重与排序2.1.2 WHERE…

深度解析:基于Python的微信小程序自动化操作实现

引言 在当今数字化时代&#xff0c;自动化技术正在改变我们与软件交互的方式。本文将深入解析一个使用Python实现的微信小程序自动化操作脚本&#xff0c;该脚本能够自动识别屏幕上的特定图像并执行点击操作。这种技术在自动化测试、批量操作和效率工具开发中有着广泛的应用前…

layui下拉框输入关键字才出数据

html里这样放 <div class"layui-form-item"><label class"layui-form-label">合同方&#xff1a;</label><div class"layui-input-block rightinline"><input type"text" name"select_text" ids…

bash和zsh的区别

Bash&#xff08;Bourne-Again SHell&#xff09;和 Zsh&#xff08;Z Shell&#xff09;都是 Unix/Linux 系统中的主流 Shell&#xff0c;但它们在功能、配置和用户体验上有显著区别。以下是两者的详细对比&#xff1a; 1. 历史与兼容性 特性BashZsh诞生时间1989 年&#xff…

组件通信-v-model

概述&#xff1a;实现 父↔子 之间相互通信。 前序知识 —— v-model的本质 <!-- 使用v-model指令 --> <input type"text" v-model"userName"><!-- v-model的本质是下面这行代码 --> <input type"text" :value"use…

虚拟机(Virtual Machine, VM)的简单介绍

目录 一、虚拟机的基本概念 二、虚拟化技术的分类 三、虚拟机的核心架构 四、虚拟机的核心应用场景 五、虚拟机的优缺点分析 六、虚拟机与容器技术的对比 七、虚拟机的未来趋势 八、总结 一、虚拟机的基本概念 虚拟机&#xff08;VM&#xff09;是一种通过软件模拟的完…

Xcode16提交App Store审核时提示bitcode报错

提交AppStore时出现bitcode报错&#xff0c;内容如下&#xff1a; Upload was cancelled. 2025-04-30 02:15:48.349 [ContentDelivery.Uploader.600000DB4380] Show Progress: Upload failed. Validation failed Invalid Executable. The executable Blockolot.app/Frameworks/…

Flutter TabBar / TabBarView 详解

目录 一、引言 二、基本用法 代码解析 三、主要属性 3.1 TabBar 3.2 TabBarView 四、进阶定制&#xff1a;突破默认样式 4.1 视觉样式深度定制 4.2 自定义指示器与标签 4.3 动态标签管理 五、工程实践关键技巧 5.1 性能优化方案 5.2 复杂手势处理 5.3 响应式布局…

mathtype转化

mathtype转latex 点击预置 选择剪切和复制预置 点击MathML 或 TeX&#xff0c;选择 LaTeX 2.09 and later mathtype转word自带编码器 与前面都相同&#xff0c;选择 MathML2.0&#xff08;m namespace&#xff09;

AI检测的荒谬性:当规则沦为一场概率游戏

当今高校对AI检测工具的依赖&#xff0c;已经演变成一场标准混乱的闹剧。有的学校指定格子达&#xff0c;有的迷信维普&#xff0c;而同一篇论文在不同的系统里竟能得出天差地别的结果——在格子达AI检测率仅12%的文章&#xff0c;放到维普却可能飙升到60%。这意味着&#xff0…