系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
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镜像
bash
docker pull zookeeper:3.5.9
2.启动运行容器
-d:守护进程运行
-p:映射端口
bash
docker run --name zk -d -p 2181:2181 zookeeper:3.5.9
3.进入容器
exec:在运行的容器中执行
-it:交互式
bash
docker exec -it zk /bin/bash
安装Dubbo-admin管理平台
Dubbo-admin管理平台,图形化的服务管理页面,安装时需要指定注册中心地址,即可从注册中心中获取到所有的提供者/消费者进行配置管理。
1.下载Dubbo-Admin镜像
bash
docker pull docker.io/apache/dubbo-admin
2.启动运行容器
bash
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.引入依赖
xml
<!-- 整合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.配置文件
yaml
# 端口号
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.提供服务
java
import com.alibaba.dubbo.config.annotation.Service;
@service // 将这个类提供的方法(服务) 对外发布。将访问的地址 ip 端口
路径 注册到注册中心
//@Service //将该类的对象创建出来放到spring的IOC容器中。 bean定义
public class OrderServiceImpl implements IOrderService {
}
注意:@Service是Dubbo依赖下的,不是Spring的
服务的消费者
1.引入依赖
xml
<!-- 整合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.配置文件
yaml
# 端口号
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.消费服务
java
/**
*
* @Autowired : 本地注入
*
* 1. 从zookeeper注册中心获取IOrderService访问的url。
* 2. 进性远程调用RPC。
* 3. 将结果封装为一个代理对象,给这个变量赋值。
*
*/
@Reference// 远程注入
private IOrderService iOrderService;
总结
提示:这里对文章进行总结:
总的来说, Dubbo 为构建分布式系统提供了一种简单而强大的方式。通过了解 Dubbo 的基本概念和核心组件,我们可以更好地利用它来构建高可靠性、可伸缩的分布式应用程序。如果你对 Dubbo 感兴趣,不妨进一步深入学习,探索其更多的功能和应用场景。