Dubbo_入门
系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
Dubbo_入门
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 系列文章目录
- 前言
- 一、什么是分布式系统
- 二、什么是RPC
- 三、Dubbo简介
- Dubbo的作用
- Dubbo支持的协议
- 核心组件
- 四、Docker安装Dubbo
- 安装Dubbo-admin管理平台
- 五、Dubbo简单使用
- 服务的生产者
- 服务的消费者
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
在当今的软件开发领域,分布式系统已经成为常态。而在分布式系统中,如何有效地管理和调用服务成为了一个重要的挑战。这就是 Dubbo 框架应运而生的原因。
Dubbo 是一个高性能、易用的分布式服务框架,它为开发者提供了一种简单而高效的方式来构建分布式系统。通过 Dubbo,你可以轻松地将服务拆分为多个独立的模块,并在不同的机器上部署它们。这样可以提高系统的可伸缩性和可靠性。
在接下来的博客文章中,我将带领你逐步了解 Dubbo 的入门使用。你将学习如何搭建 Dubbo 服务、如何调用其他服务以及如何处理服务之间的通信。
无论你是刚刚开始接触分布式系统,还是已经有一定经验的开发者,Dubbo 都能为你提供一个强大的工具,帮助你构建高效、可靠的分布式应用程序。
让我们一起开始探索 Dubbo 的世界,释放分布式服务的潜力!
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是分布式系统
在当今的数字时代,处理大量数据和高并发请求已经成为许多应用程序所面临的挑战。为了解决这些问题,我们需要一种能够突破单机限制的解决方案,这就是分布式系统。
分布式系统是由多个独立的计算机节点通过网络连接组成的一个整体。这些节点可以分布在不同的地理位置,它们协同工作以实现共同的目标。与传统的单体系统相比,分布式系统具有更高的可伸缩性、可靠性和容错能力。
在分布式系统中,每个节点都可以承担一部分计算和数据处理工作。通过将负载分布到多个节点上,可以提高系统的处理能力和响应速度。此外,分布式系统还可以通过数据复制和备份来确保数据的安全性和可靠性。
然而,分布式系统也带来了一些挑战,如一致性、容错性和网络延迟等问题。为了解决这些问题,需要采用适当的分布式算法和协议来协调各个节点的操作。
总的来说,分布式系统为我们提供了一种强大的解决方案,使我们能够处理大规模的数据和高并发请求。它是现代互联网应用程序的基础,支撑着众多知名的科技公司和互联网服务。
二、什么是RPC
RPC( Remote Procedure Call )即远程过程调用,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC 的思想是让远程的调用者像调用本地函数一样调用远程的函数。它使得分布在不同计算机上的程序能够相互通信和协作,而无需关心网络细节。
RPC 的工作原理如下:
- 客户端发起请求:客户端程序通过指定的协议和格式向服务端发送请求,请求中包含了要调用的远程函数的名称、参数等信息。
- 服务端接收请求:服务端收到客户端的请求后,根据请求中的信息确定要调用的本地函数,并将参数传递给该函数。
- 服务端执行函数:服务端的本地函数执行相应的操作,并返回结果。
- 服务端返回结果:服务端将函数的执行结果按照约定的协议和格式返回给客户端。
- 客户端接收结果:客户端接收到服务端返回的结果后,进行相应的处理。
三、Dubbo简介
Apache Dubbo是一款高性能、轻量级的开源服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
Dubbo的作用
- 远程调用: Dubbo 提供了一种高效、可靠的远程调用机制,使得服务消费者可以方便地调用其他服务提供者的功能。
- 负载均衡: Dubbo 支持多种负载均衡策略,如随机、轮询、加权等。它可以根据服务的负载情况自动分配请求到不同的服务实例,以提高系统的性能和可用性。
- 服务注册与发现: Dubbo 支持服务的自动注册和发现。通过注册中心,服务提供者可以将其服务信息发布到注册中心,而服务消费者可以通过查询注册中心获取可用的服务列表。
- 服务治理: Dubbo 提供了丰富的服务治理功能,包括服务路由、服务限流、服务容错等。这些功能可以帮助开发者更好地管理和监控服务的运行状况。
Dubbo支持的协议
- Dubbo协议
- Hessian协议
- HTTP协议
- RMI协议
- WebService协议
- Memcached协议
- Redis协议
核心组件
- 注册中心(Registry):用于存储和管理服务提供者的信息,服务消费者通过注册中心获取服务提供者的地址和接口信息。
- 服务提供者(Provider):服务的提供方,将自身的服务通过 Dubbo 框架暴露给其他服务使用者。
- 服务消费者(Consumer):服务的调用方,通过 Dubbo 框架调用其他服务提供者提供的服务。
- 监控中心(Monitor):用于监控服务的调用情况和性能指标,提供实时的监控数据和统计分析。
- 配置中心(Config Center):用于集中管理服务的配置信息,支持动态配置更新。
- 协议(Protocol): Dubbo 支持多种协议,如 HTTP、TCP 等,用于服务之间的通信。
- 序列化(Serialization):用于数据在网络传输中的序列化和反序列化,支持多种序列化格式,如 JSON、Hessian 等。
- 负载均衡(Load Balance):用于将请求均衡地分配到多个服务提供者实例上,提高系统的性能和可靠性。
- 服务治理(Service Governance):包括服务路由、服务限流、服务容错等功能,用于管理和优化服务的运行。
四、Docker安装Dubbo
1.下载Zookeeper镜像
docker pull zookeeper:3.5.9
2.启动运行容器
-d:守护进程运行
-p:映射端口
docker run --name zk -d -p 2181:2181 zookeeper:3.5.9
3.进入容器
exec:在运行的容器中执行
-it:交互式
docker exec -it zk /bin/bash
安装Dubbo-admin管理平台
Dubbo-admin管理平台,图形化的服务管理页面,安装时需要指定注册中心地址,即可从注册中心中获取到所有的提供者/消费者进行配置管理。
1.下载Dubbo-Admin镜像
docker pull docker.io/apache/dubbo-admin
2.启动运行容器
docker run -d \
--name dubbo-admin \
-p 9600:8080 \
-e admin.registry.address=zookeeper://192.168.66.100:2181 \
-e admin.config-center=zookeeper://192.168.66.100:2181 \
-e admin.metadata-report.address=zookeeper://192.168.66.100:2181 \
--restart=always \
docker.io/apache/dubbo-admin
参数配置如下:
- –restart:always 容器退出时总是重启
- admin.registry.address:注册中心
- admin.config-center:配置中心
- admin.metadata-report.address:元数据中心
五、Dubbo简单使用
Dubbo简单一点来是说就是提供远程服务的,现在举一个简单的例子来说明。现有两个服务(应用),一个是服务的生产者,另一个是服务的消费者,现在服务的消费者要调用服务的生产者(消费者调用生产者的接口)。接下来的演示只显示重要部分,且Dubbo和Zookeeper需要提前启动。
服务的生产者
1.引入依赖
<!-- 整合dubbo -->
<dependency><groupId>io.dubbo.springboot</groupId><artifactId>spring-boot-starter-dubbo</artifactId><version>1.0.0</version>
</dependency>
<!-- zookeeper客户端 -->
<dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.7</version>
</dependency>
2.配置文件
# 端口号
server.port=9090
# 1. 配置项目名称
spring.dubbo.application.name=user-service
# 2. 配置注册中心地址
spring.dubbo.registry.address=zookeeper://192.168.66.100
spring.dubbo.registry.port=2181
# 3. 指定dubbo使用的协议、端口
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
# 4. 指定注册到zk上超时时间,ms
spring.dubbo.registry.timeout=10000
# 5. 配置Dubbo包扫描
spring.dubbo.scan=com.itbaizhan.service
3.提供服务
import com.alibaba.dubbo.config.annotation.Service;
@service // 将这个类提供的方法(服务) 对外发布。将访问的地址 ip 端口
路径 注册到注册中心
//@Service //将该类的对象创建出来放到spring的IOC容器中。 bean定义
public class OrderServiceImpl implements IOrderService {
}
注意:@Service是Dubbo依赖下的,不是Spring的
服务的消费者
1.引入依赖
<!-- 整合dubbo -->
<dependency><groupId>io.dubbo.springboot</groupId><artifactId>spring-boot-starter-dubbo</artifactId><version>1.0.0</version>
</dependency>
<!-- zookeeper客户端 -->
<dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.7</version>
</dependency>
2.配置文件
# 端口号
server.port=8080
# 1. 配置项目名称
spring.dubbo.application.name=user-service
# 2. 配置注册中心地址
spring.dubbo.registry.address=zookeeper://192.168.66.100
spring.dubbo.registry.port=2181
# 3. 指定dubbo使用的协议、端口
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20881
# 4. 指定注册到zk上超时时间,ms
spring.dubbo.registry.timeout=10000
# 5. 配置Dubbo包扫描
spring.dubbo.scan=com.itbaizhan.service
3.消费服务
/*** * @Autowired : 本地注入* * 1. 从zookeeper注册中心获取IOrderService访问的url。* 2. 进性远程调用RPC。* 3. 将结果封装为一个代理对象,给这个变量赋值。 * */@Reference// 远程注入private IOrderService iOrderService;
总结
提示:这里对文章进行总结:
总的来说, Dubbo 为构建分布式系统提供了一种简单而强大的方式。通过了解 Dubbo 的基本概念和核心组件,我们可以更好地利用它来构建高可靠性、可伸缩的分布式应用程序。如果你对 Dubbo 感兴趣,不妨进一步深入学习,探索其更多的功能和应用场景。
相关文章:
Dubbo_入门
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 Dubbo_入门 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、什么是分布式系统二、什么…...

Ubuntu22.04更换软件源
本文以Ubuntu22.04更换科大源为例演示更改软件源的方法,其他版本的Ubuntu系统或更换其他软件源,如清华源,阿里源等,方法类似。 前言 中国科学技术大学开源软件镜像由中国科学技术大学网络信息中心提供支持。 mirrors.ustc.edu.…...
解密Android某信聊天记录
前置条件 frida, frida-tools, adb 获取密码 h.js console.log(script loaded successfully);function xx() {function strf(str, replacements) {return str.replace(/\$\{\w\}/g, function(placeholderWithDelimiters) {var placeholderWithoutDelimiters placeholderWi…...

海外云手机对于亚马逊卖家的作用
近年来,海外云手机作为一种新型模式迅速崭露头角,成为专业的出海SaaS平台软件。海外云手机在云端运行和存储数据,通过网页端操作,将手机芯片放置在机房,通过网络连接到服务器,为用户提供便捷的上网功能。因…...
交换机的发展历史
交换机发展历史是什么,详细介绍每代交换机的性能特点,特色功能 交换机的发展历史可以大致分为以下几个阶段,每个阶段的设备性能特点和特色功能有所差异: 1. 第一代以太网交换机(1980年代末至1990年代初) …...

用katalon解决接口/自动化测试拦路虎--参数化
不管是做接口测试还是做自动化测试,参数化肯定是一个绕不过去的坎。 因为我们要考虑到多个接口都使用相同参数的问题。所以,本文将讲述一下katalon是如何进行参数化的。 全局变量 右侧菜单栏中打开profile,点击default,打开之后…...

CSRF靶场练习
简述:CSRF漏洞实际很少;条件限制很多;局限性很大;实验仅供参考,熟悉csrf概念和攻击原理即可 Pikachu靶场 CSRF GET 登录用户vince的账户可以看到用户的相关信息; 点击修改个人信息,发现数据包…...
pgsql的查询语句有没有走索引
使用EXPLAIN ANALYZE命令: EXPLAIN ANALYZE [ ( option [, ...] ) ]statement示例: EXPLAIN ANALYZE SELECT * FROM employees WHERE age > 30;在执行计划中,如果看到索引扫描(Index Scan)或位图堆扫描࿰…...

jenkins部署(docker)
docker部署,避免安装tomcat 1.拉镜像 docker pull jenkins/jenkins2.宿主机创建文件夹 mkdir -p /lzp/jenkins_home chmod 777 /lzp/jenkins_home/3.启动容器 docker run -d -p 49001:8080 -p 49000:50000 --privilegedtrue -v /lzp/jenkins_home:/var/jenkins_…...

Python实现时间序列分析AR定阶自回归模型(ar_select_order算法)项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 时间序列分析中,AR定阶自回归模型(AR order selection)是指确定自回…...

Springboot自定义线程池实现多线程任务
1. 在启动类添加EnableAsync注解 2.自定义线程池 package com.bt.springboot.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTask…...

linux离线升级openssh方法
检查openssh版本: 升级前openssh 版本为7.4 openssl 版本为1.0.2k Openssh9.6 所需openssl >1.1.1 因此openssl也需要升级。 为了防止升级失败,无法使用SSH登录,首先安装telnet 预防。查看是否安装了telnet 客户端及服务 未安装tel…...

(五)MySQL的备份及恢复
1、MySQL日志管理 在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这样情况下,我们必须保证数据的安全性和完整性,就需要使用日志来查看或者恢复数据了 数据库中数据丢失或被破坏可能原因: 误删除数据…...

VitePress-04-文档中的表情符号的使用
说明 vitepress 的文档中是支持使用表情符号的,像 😂 等常用的表情都是支持的。 本文就来介绍它的使用方式。 使用语法 语法 : :表情名称: 例如 : :joy: 😂 使用案例代码 # 体会【表情】的基本使用 > hello world …...
Redis客户端之Redisson(二)Redisson组件
Redisson的几个常用客户端 一、RedissonClient 1、创建 通过Config对象配置RedissonClient所需要的参数,然后获取RedissonClient对象即可。 Config config new Config(); config.useSingleServer().setAddress("redis://127.0.0.1:6379"); RedissonC…...

用Visual Studio Code创建JavaScript运行环境【2024版】
用Visual Studio Code创建JavaScript运行环境 JavaScript 的历史 JavaScript 最初被称为 LiveScript,由 Netscape(Netscape Communications Corporation,网景通信公司)公司的布兰登艾奇(Brendan Eich)在 …...
spring-web搭建
先说说这篇文章看完你能学习到什么吧 1:spring-web是什么原理以及组成,2:spring-web的搭建(以普通tomcat服务器做基础),3:敲黑板 1:spring-web是什么原理以及组成 spring-web是sp…...

C++ 之LeetCode刷题记录(二十三)
😄😊😆😃😄😊😆😃 开始cpp刷题之旅。 目标:执行用时击败90%以上使用 C 的用户。 118. 杨辉三角 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows …...

在ubuntu上在安装Squid代理服务器
Squid 是一个代理和缓存服务器,它将请求转发到所需的目的地,同时保存请求的内容,当你再次请求相同内容时,他可以向你提供缓冲内容,从而提高访问速度。Squid代理服务器目前支持的协议有:http、SSL、DNS、FTP…...
如何解决 MySQL 的 socket 错误
MySQL 通过使用 socket 文件 来管理与数据库服务器的连接,这是一种特殊类型的文件,用于促进不同进程之间的通信。MySQL 服务器的 socket 文件名为 mysqld.sock,在 Ubuntu 系统中通常存储在 /var/run/mysqld/ 目录中。这个文件会被 MySQL 服务…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...