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 服务…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
