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 感兴趣,不妨进一步深入学习,探索其更多的功能和应用场景。

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

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

相关文章

Android开发--状态栏布局隐藏的方法

1.问题如下&#xff0c;安卓布局很不协调 2.先将ActionBar设置为NoActionBar 先打开styles.xml 3.使用工具类 package com.afison.newfault.utils;import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.graph…

【Elasticsearch篇】详解使用RestClient操作索引库的相关操作

文章目录 &#x1f354;什么是Elasticsearch&#x1f33a;什么是RestClient&#x1f386;代码操作⭐初始化RestClient⭐使用RestClient操作索引库⭐使用RestClient删除索引库⭐使用RestClient判断索引库是否存在 &#x1f354;什么是Elasticsearch Elasticsearch是一个开源的分…

SpringBoot 统计更多Api接口SQL相关日志信息

统计(查询,更新,批量更新)SQL执行次数及用时并输出log import com.zhangziwa.practisesvr.utils.log.LogContext; import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.plugin.Intercepts…

什么是通配监听端口? 什么是通配监听IP?

什么是通配监听端口? 监听端口&#xff1a; 指的是服务器或服务开启的特定TCP或UDP端口号&#xff0c;等待客户端连接或发送数据。TCP/IP协议下每个端口只能由一个服务独占监听&#xff0c;一个服务或应用会指定监听特定的一个或多个端口来接收客户端的连接请求。 例如 Web…

RocketMQ-Windows版本安装

RocketMQ-Windows版本安装 1.环境准备 JDK和maven需要先安装好&#xff0c;我这里使用的JDK1.8版本 Maven 3.8.6版本。需要注意的是&#xff0c;这里配置java时需要指定JAVA_HOME环境变量 RokectMQ才能正常启动。 2.下载RocketMQ 官网下载: https://rocketmq.apache.org/z…

C++读取txt文件中的逐个字符

为了增加读取的灵活性&#xff0c;所以separator和filename都设置为在主函数中获取输入或者在函数中传参的视线方法 举个例子&#xff0c;txt文件如下&#xff1a; household;2;true; 首先声明一个读取数据的文件 void read_data_file(const string& filename,char se…

【计算机组成原理】P2 计算机系统的层次结构

计算机系统的层次结构 现代计算机的解题过程计算机语言发展历程早期20世纪50年代20世纪60年代微程序机器 M 0 M_0 M0​操作系统机器 M 2 M_2 M2​ 现代计算机的解题过程 首先将用户用高级语言编写的源程序与数据一起送入计算机内&#xff0c;再由计算机将其翻译成机器能识别…

Android:registerForActivityResult

在《Android:FragmentActivity》中我们提到过Fragment中的onActivityResult已经废弃了,推荐使用registerForActivityResult去注册一个ActivityResultContract契约,从而启动一个forResult的Activity来达到目的,所以这里就看看这个流程是如何进行的。 场景:MainActivity中嵌…

Matplotlib Mastery: 从基础到高级的数据可视化指南【第30篇—python:数据可视化】

文章目录 Matplotlib: 强大的数据可视化工具1. 基础1.1 安装Matplotlib1.2 创建第一个简单的图表1.3 图表的基本组件&#xff1a;标题、轴标签、图例 2. 常见图表类型2.1 折线图2.2 散点图2.3 条形图2.4 直方图 3. 图表样式与定制3.1 颜色、线型、标记的定制3.2 背景样式与颜色…

CC工具箱使用指南:【属性映射】

一、简介 在规划工作中&#xff0c;经常会遇到这样一种情况&#xff0c;有一组一一对应的值。 比如用地编码和用地名称&#xff0c;用地编码【0101】和用地名称【水田】是对应的。 当你在用地编码字段输入【0101】时&#xff0c;用地名称值就必须为【水田】。 当我们确定用地…

gin路由篇

1. 基本路由 gin 框架中采用的路由库是基于httprouter做的 import ("net/http""github.com/gin-gonic/gin" )func main() {// 1.创建路由r : gin.Default()// 2.绑定路由规则&#xff0c;执行的函数// gin.Context&#xff0c;封装了request和responser.…

Nacos源码下载与运行

早先在linux环境下搭建过nacos环境 即Centos安装部署nacos实战&#xff0c;本次是从官网上下载源码&#xff0c;本地运行看看&#xff0c;记录过程&#xff0c;方便备查。 第一步、Nacos源码下载 推荐到nacos官网下载 Github地址&#xff0c;本次选择最新版&#xff0c;1.4.7…

查看Pytorch的GPU是否可用

查看Pytorch的GPU是否可用 import torch torch.cuda.is_available()返回为True表示 Pytorch 的 GPU 可用&#xff0c;返回为False表示 Pytorch 的 GPU 不可用。 其余命令&#xff1a; # 查看cuda是否可用 torch.cuda.is_available() # 返回当前设备索引 torch.cuda.current_d…

openssl3.2/test/certs - 019 - ca-nonca trust variants: +serverAuth, +anyEKU

文章目录 openssl3.2/test/certs - 019 - ca-nonca trust variants: serverAuth, anyEKU概述笔记 ca-nonca.pem from exp 016openssl3.2/test/certs - 019 - ca-nonca trust variants: serverAuth, anyEKUEND openssl3.2/test/certs - 019 - ca-nonca trust variants: serverAu…

Kubeadm安装单master多node节点K8S集群

kubeadm安装k8s1.25版本集群步骤 环境说明实验环境规划集群搭建规划 初始化安装k8s集群的实验环境安装虚拟机更新yum源和操作系统配置机器主机名配置主机hosts文件&#xff0c;相互之间通过主机名互相访问配置主机之间无密码登录关闭交换分区swap&#xff0c;提升性能修改机器内…

Excel导出警告:文件格式和拓展名不匹配

原因描述&#xff1a; Content-Type 原因&#xff1a;Content-Type&#xff0c;即内容类型&#xff0c;一般是指网页中存在的Content-Type&#xff0c;用于定义网络文件的类型和网页的编码&#xff0c;决定文件接收方将以什么形式、什么编码读取这个文件&#xff0c;这就是经常…

Qt单选按钮

前言 本篇文章介绍Qt的单选按钮&#xff0c;就是QRadioButton QRadioButton是一个选项按钮&#xff0c;可以打开&#xff08;选中&#xff09;或关闭&#xff08;取消选中&#xff09;。单选按钮通常向用户提供“众多之一”的选择。 在一组单选按钮中&#xff0c;一次只能选中…

【Linux命令】du 和 df 查看磁盘占用情况

du 和 df 算是一对同门师兄弟&#xff0c;du 侧重在文件夹和文件的磁盘占用方面&#xff0c;而 df 则侧重在文件系统级别的磁盘占用方面。这两个命令都非常的基础&#xff0c;也是每位 Linux 工程师都应该掌握的命令。 1、du 命令&#xff1a; du 是 “disk usage” 的缩写&a…

CommunityToolkit.Mvvm源生成器

引言 MVVM 工具包包含全新的 Roslyn 源生成器&#xff0c;有助于在使用 MVVM 体系结构编写代码时大幅减少样板。这意味着&#xff0c;在编写代码时&#xff0c;MVVM 工具包生成器现在将负责在后台为你生成其他代码。 以前&#xff1a; private string? name;public string?…

QT 实现自动生成小学两位数加减法算式

小学生加减法训练 QT实现–自动生成两位数加减法算式&#xff0c;并输出txt文件 可以copy到word文件&#xff0c;设置适当字体大小和行间距&#xff0c;带回家给娃做做题 void MainWindow::test(int answerMax, int count) {// 创建一个随机数生成器QRandomGenerator *gener…