记录一下dubbo的快速入门(代码片段)

TheLongir TheLongir     2022-10-20     117

关键词:

文档背景

在很多后台服务的架构中,采用了RPC+微服务的架构思想。
RPC采用dubbo框架作为治理框架,对外接口采用RESTful和GraphQL接口方式
所以学习一下dubbo是很有必要的 

1、什么是Dubbo

官网:https://dubbo.apache.org/zh/docs/
背景介绍

Apache Dubbo™ (incubating)是一款高性能Java RPC框架
duboo是由阿里团队开发的RPC框架,由Apache孵化

早期介绍

Dubbo是一个分布式框架,最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦。
从服务模型的角度,Dubbo采用的是一种非常简单的模型。1.提供服务方 2.消费方 3.第三方(注册中心、协议支持、服务监控)

1.1、什么是RPC

RPC(Remote Procedure Call Protocol)——远程过程调用协议,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。它假定某些传输协议的存在,如TCP或UDP,以便为通信程序之间携带信息数据。通过它可以使函数调用模式网络化。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

2、Dubbo服务治理

在大规模服务化之前,应用可能只是通过 RMI 或 Hessian 等工具。
简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过 F5 等硬件进行负载均衡。
弊端:
当服务越来越多时,服务 URL 配置管理变得非常困难,F5 硬件负载均衡器的单点压力也越来越大。
当进一步发展,服务间依赖关系变得复杂,无法描述架构关系。
服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?

  • Provider 暴露服务的提供方
  • Concumer 调用远程服务的服务消费方
  • Registry 服务注册与发现的注册中心
  • Monitor 统计服务的调用次数和调用时间的监控中心
  • Container 服务运行容器

调用关系

服务容器负责启动,加载,运行服务提供者。
服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者在启动时,向注册中心订阅自己所需的服务。
注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Dubbo架构具有一下几个特点:分别是连通性、健壮性、伸缩性、以及向未来架构的升级性

3、注册中心

注册中心有很多种,而Dubbo也支持很多注册中心,一般推荐使用Zookeeper。注册中心有点类似与SpringCloud中常用的微服务治理工具 Eureka。

3.1、为什么使用Zookeeper

Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务.
支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用。


流程说明:

  • 服务提供者启动时: 向 dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址
  • 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向
    /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
  • 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。

支持以下功能:

  • 当提供者出现断电等异常停机时,注册中心能自动删除提供者信息
  • 当注册中心重启时,能自动恢复注册数据,以及订阅请求
  • 当会话过期时,能自动恢复注册数据,以及订阅请求
  • 当设置 <dubbo:registrycheck=“false” > 时,记录失败注册和订阅请求,后台定时重试
  • 可通过 <dubbo:registryusername=“admin” password=“1234” /> 设置 zookeeper 登录信息
  • 可通过 <dubbo:registrygroup=“dubbo”/ > 设置 zookeeper 的根节点,不设置将使用无根树
  • 支持 * 号通配符 <dubbo:referencegroup=" * " version=" * "/ >,可订阅服务的所有分组和所有版本的提供者

4、Dubbo Admin

Dubbo提供了可视化的界面管理工具,方便我们对服务进行管理,它就是Dubbo Admin,
代码地址:https://github.com/apache/incubator-dubbo-ops

部署安装
第一步,下载并解压

git clone https://github.com/apache/incubator-dubbo-ops.git

第二步,修改配置文件

## 这里就是我们配置利用Docker安装好的 Zookeeper地址
在 dubbo-admin-backend/src/main/resources/application.properties 中指定注册中心地址。

第三步,使用maven进行构建项目(都要在Maven环境下执行):

#构建 打包
mvn clean package
#通过Maven插件启动项目
mvn --projects dubbo-admin-backend spring-boot:run

最后,访问系统
打开浏览器:输入对应地址就行

该工具可以查看 搜索服务信息,可以查看服务提供者和服务消费者的详细信息

5、服务的负载均衡

在集群负载均衡时,Dubbo 提供了多种均衡策略,默认为 random 随机调用。

负载均衡的策略
Random LoadBalance

  • 随机,按权重设置随机概率
  • 在一个界面上碰撞的概率高,但调用越大分布越均匀,而且概率使用权重也比较均匀,有利于动态调整提供者权重。

RoundRobin LoadBalance

  • 轮询,按公约后的权重设置轮询比率。
  • 存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台就卡在那,久而久之,所有请求都会卡在第二台服务器上。

6、Dubbo://协议

dubbo提供9种协议,分别是
dubbo://
rmi://
hessian://
http://
webservice://
thrift://
memcached://
redis://
rest://

Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远
大于服务提供者机器数的情况。
反之,Dubbo 缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。

  • Transporter (传输): mina, netty, grizzy
  • Serialization(序列化): dubbo, hessian2, java, json
  • Dispatcher(分发调度): all, direct, message, execution, connection
  • ThreadPool(线程池): fixed, cached

7、代码资源

代码仓库URL: https://gitee.com/yi-yunlong/itcast-dubbo.git

写的一个消费者 RPC调用远端服务API,开启提供者多实例,测试 dubbo的随机调用和轮询机制。
核心测试类如下
配置好就可以启动了

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest 

    @Reference(version = "1.0.0", loadbalance = "roundrobin")
    private UserService userService;

    @Test
    public void testQueryAll() 
        for (int i = 0; i < 100; i++) 
            System.out.println("开始调用远程服务 >>>>>" + i);
            List<User> users = this.userService.queryAll();
            for (User user : users) 
                System.out.println(user);
            
            try 
                Thread.sleep(1000);
             catch (InterruptedException e) 
                e.printStackTrace();
            
        

    



当出现如下说明dubbo的服务端启动成功并且成功将自己注册进了zookeeper

dubbo入门系列之快速部署一个微服务应用(代码片段)

本文将基于DubboSamples示例演示如何快速搭建并部署一个微服务应用。背景Dubbo作为一款微服务框架,最重要的是向用户提供跨进程的RPC远程调用能力。如上图所示,Dubbo的服务消费者(Consumer)通过一系列的工作将请求发送给服务... 查看详情

dubbo--dubbo快速入门代码编写(代码片段)

文章目录1.Dubbo快速入门代码编写1.1需求分析1.2项目和模块创建1.3导入相关依赖1.4编写提供服务的接口1.5编写调用服务的程序1.6安装dubbo-service(被依赖的模块需要安装)1.7配置Tomcat1.8启动测试1.9说明1.10改造dubbo-service:... 查看详情

dubbo远程调用(rpc)-->快速入门+管理控制台+整合springboot开发(代码片段)

文章目录一、ApacheDubbo概述1.Dubbo简介2.Dubbo架构二、Dubbo快速入门1.点对点直连【1】服务提供者-service项目【2】服务消费者-web项目2.zookeeper注册中心【1】服务提供者【2】服务消费者三、Dubbo管理控制台1.jar包部署管理平台2.war包部... 查看详情

springboot+dubbo+zookeeper快速入门案例(代码片段)

项目目录结构:第一步:创建一个SpringBoot项目,这里选择Maven项目或者SpringInitializer都可以,这里创建了一个Maven项目(SpringBoot-Dubbo),pom.xml文件如下:<?xmlversion="1.0"enco 查看详情

springboot+dubbo+zookeeper快速入门案例(代码片段)

项目目录结构:第一步:创建一个SpringBoot项目,这里选择Maven项目或者SpringInitializer都可以,这里创建了一个Maven项目(SpringBoot-Dubbo),pom.xml文件如下:<?xmlversion="1.0"enco 查看详情

springboot+dubbo+zookeeper快速入门案例(代码片段)

项目目录结构:第一步:创建一个SpringBoot项目,这里选择Maven项目或者SpringInitializer都可以,这里创建了一个Maven项目(SpringBoot-Dubbo),pom.xml文件如下:<?xmlversion="1.0"enco 查看详情

dubbo快速入门介绍使用(代码片段)

1、介绍Dubbo官方文档:https://dubbo.apache.org/zh目前Dubbo最新的是Dubbo3。Dubbo3格式的Provider地址不能被Dubbo2的Consumer识别到,反之Dubbo2的消费者也不能订阅到Dubbo3Provider。这里的架构和使用都是基于Dubbo2.7版本,Dubbo2(2.7... 查看详情

dubbo快速入门demo(代码片段)

参考文章 https://blog.csdn.net/abcwanglinyong/article/details/81906027该demo包含三个项目,分别是:服务提供端项目:provider服务消费端项目:consumer共用服务接口项目:api1、新建maven项目api注意将其pom.xml中的打包方式改为jar然后在com.dubb... 查看详情

dubbo快速开始与依赖(代码片段)

1、参考快速开始:http://dubbo.apache.org/en-us/docs/user/quick-start.html依赖:http://dubbo.apache.org/en-us/docs/user/dependencies.htmlDubbo官方文档提供了一个最简单的快速入门示例,但它存在一点问题。本文从无到有, 查看详情

springcloudalibaba系列dubbo基础入门篇(代码片段)

...二、Dubbo概述1.Dubbo概念2.Dubbo架构3.Dubbo运行流程三、dubbo快速入门1.Zookeeper安装(1)下载安装(2)配置启动2.Spring和SpringMVC整合-本地调用3.服务提供者4.服务消费者Dubbo-基础入门篇学习目标分布式系统中的相关概念D... 查看详情

企业级应用,如何实现服务化三(dubbo入门案例)(代码片段)

...性、升级性。下面先来实现一个入门级的demo,直观感受一下。1.案例说明通过一个简单的案例,演示dubbo入门使用。案例中只有服务 查看详情

dubbo专题(基础篇):dubbo介绍环境搭建与实践(代码片段)

前几天复习了Dubbo相关的技术点,趁热打铁记录一下,本篇博客属于Dubbo的入门基础篇,内容主要包括Dubbo概念,Dubbo特点,Dubbo基本工作原理,Dubbo环境搭建,DubboDemo实践,一起来学习下吧。Dubbo概念... 查看详情

简单聊一下vuex的基本使用(快速入门)(代码片段)

什么是Vuex?Vuex是专门为Vue.js应用开发的状态管理模式,采用集中式存储所有组件的状态,让组件之间可以通信用人话说就是:vuex就是专门用来管理vue的数据的,统一在一个文件中存储公共的数据Vuex中有个5个内容需要学习:state—存储... 查看详情

dubbo(代码片段)

...xff1f;dubbo官方中文文档dubbo-admin的下载安装dubbo+springboot快速入门1.使用zookeeper来作为注册中心2.搭建公共接口(API)模块3.搭建服务提供者(provider)4.搭建服务消费者(consumer& 查看详情

dubbo(代码片段)

...xff1f;dubbo官方中文文档dubbo-admin的下载安装dubbo+springboot快速入门1.使用zookeeper来作为注册中心2.搭建公共接口(API)模块3.搭建服务提供者(provider)4.搭建服务消费者(consumer& 查看详情

springboot+dubbo+zookeeper快速入门案例(代码片段)

项目目录结构:第一步:创建一个SpringBoot项目,这里选择Maven项目或者SpringInitializer都可以,这里创建了一个Maven项目(SpringBoot-Dubbo),pom.xml文件如下:<?xmlversion="1.0"encoding="UTF-8... 查看详情

探花交友day00—探花交友前置dubbo(代码片段)

目录1、Dubbo的前世今生2、Dubbo的快速入门2.1、Dubbo的基本架构2.2、Nacos2.3、管理后台2.4、入门案例2.5、代码优化3、Dubbo高级特性3.2、超时与重试3.3、启动检查3.4、多版本3.5、负载均衡4、SpringCloud整合Dubbo4.1、功能概述4.2、入门案例... 查看详情

goelasticsearch增加快速入门(代码片段)

...RESTfulAPI参考文献创建完ES的index,便可以向index中添加记录。1.创建单个文档1.1Golang借助IndexService创建指定ID的文档。//Create2ES添加记录到ESfuncCreate2ES(ctxcontext.Context,index, 查看详情