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 服务…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...