一文轻松入门Dubbo

1、简介

Dubbo是一个高性能、轻量级的开源分布式服务框架,最初由阿里巴巴开发并开源。它提供了服务注册、发现、调用和负载均衡等分布式服务治理功能,旨在简化分布式系统的开发和维护。

Dubbo框架的核心概念:

  1. 服务提供者(Provider):提供具体服务实现的节点。

  2. 服务消费者(Consumer):调用远程服务的节点。

  3. 注册中心(Registry):服务的注册与发现中心,用于提供服务地址和元数据的管理。

  4. 监控中心(Monitor):用于收集和展示服务调用的统计数据。

  5. 配置中心(Config Center):用于集中管理Dubbo框架的配置信息。

  6. 通信协议(Protocol):定义服务调用的方式,支持多种协议,如Dubbo协议、HTTP协议等。

  7. 负载均衡(Load Balance):在服务提供者集群中选择合适的节点进行负载均衡。

  8. 集群容错(Cluster):处理服务调用的容错机制,提高系统的可用性。

  9. 服务路由(Router):根据路由规则决定服务调用的路径。

dubbo3.2.1及以上版本支持springboot3,需要使用jdk17+

2、Dubbo使用注册中心
2.1、zookeeper注册中心

 添加依赖,如下:

<!-- web依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>3.1.2</version>
    <exclusions>
        <exclusion>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- dubbo依赖-->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>3.2.4</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.4.14</version>
</dependency>
<!-- 注册中心依赖-->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-dependencies-zookeeper</artifactId>
    <version>3.2.4</version>
    <type>pom</type>
    <exclusions>
        <exclusion>
            <artifactId>slf4j-reload4j</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
        <exclusion>
            <artifactId>zookeeper</artifactId>
            <groupId>org.apache.zookeeper</groupId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 使用指定版本的zookeeper-->
<dependency>
    <artifactId>zookeeper</artifactId>
    <groupId>org.apache.zookeeper</groupId>
    <version>3.6.4</version>
</dependency>

配置文件:

server:
  port: 8081

spring:
  application:
    name: dubbo-provider
dubbo:
  protocol:
    name: dubbo
    port: 20881
  registry:
    address: zookeeper://127.0.0.1:2181
2.2、使用nacos作为注册中心

 添加依赖,如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>3.1.2</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.3</version>
</dependency>
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>3.2.4</version>
</dependency>
<!-- 使用triple协议-->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-rpc-triple</artifactId>
    <version>3.2.4</version>
</dependency>
<!-- 使用dubbo协议-->
<!--        <dependency>-->
<!--            <groupId>org.apache.dubbo</groupId>-->
<!--            <artifactId>dubbo-rpc-dubbo</artifactId>-->
<!--            <version>3.2.4</version>-->
<!--        </dependency>-->
<!-- 使用nacos作为注册中心-->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-registry-nacos</artifactId>
    <version>3.2.4</version>
</dependency>

配置文件

server:
  port: 8081

spring:
  application:
    name: dubbo-provider
dubbo:
  protocol:
    name: tri    # dubbo,triple,http ...
    port: -1     # 使用-1是为了服务启动使用的协议端口号冲突
    transporter: mina   # 通信方式:Netty, Mina, NIO, Dubbo(默认) ...
    serialization: hassian  # 序列化方式:hassian(默认),protobuf,kryo ....
  registry:
    address: nacos://127.0.0.1:8848
3、Dubbo使用示例
3.1、provider
import com.weilong.UserService;
import org.apache.dubbo.config.annotation.DubboService;
@DubboService(version = "1.0") // 服务提供者注解
public class UserServiceImpl implements UserService {
    @Override
    public String getUser() {
        return "weilong1.0";
    }
}
3.2、consumer
import org.apache.dubbo.config.annotation.DubboReference;
@RestController
public class OrderController {
    @DubboReference(version = "1.0") // 服务调用者注解
    private UserService userService;

    @GetMapping("/test")
    public String getUser(){
        return userService.getUser();
    }
}
 3.3、将要提供服务的接口放入公共模块
public interface UserService {
    String getUser();
}

 注:要在provider模块和consumer模块中都要引入common模块

3.、主启动类
@SpringBootApplication
@EnableDubbo // 开启dubbo注解扫描
public class DubboProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }
}
4、注解解释

注:以下注解只适用于dubbo,如果接口还要提供springcloud服务,Spring还需要添加对应注解。

// 1、@EnableDubbo
扫描本包及其子包下使用@DubboService注解的类,[这样的话就可以不用再调用端添加],可以使用@DubboComponentScan指定扫描的包。
// 2、@DubboService
将标注类进行实例化并且发布成RPC服务,类似于Spring的@Component。
// 3、@DubboReference
注入远端服务的代理对象,类似于Spring的@Autowired。
5、使用指定协议、通信方式、序列化

注:在应用中,设置不同的通信方式或者不同的序列化方式,都需要引入相关依赖,例如:

<!-- 更改通信方式 -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-remoting-mina</artifactId>
    <version>2.7.23</version>
</dependency>
<!-- 更改使用的序列化方式 -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-serialization-protobuf</artifactId>
    <version>2.7.23</version>
</dependency>
<!-- 更改使用的通信协议 -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-rpc-triple</artifactId>
    <version>3.2.4</version>
</dependency>
6、使用终端完成服务治理

       在dubbo 2.5.8 新版本增加了 QOS 模块,提供了新的 telnet 命令支持。dubbo管它叫在线运维命令,我们可以通过它能够看到服务提供者状态,服务调用者状态,现在dubbo提供了 ls , online,offline,help ,quit命令。

dubbo:
  application:
    qos-enable: true   # Quality of Service:服务质量, 支持在终端上使用telnet的方式连接 dubbo Qos,默认 true
    qos-accept-foreign-ip: true   # 允许访问的ip,缺省就是false,表示任何ip都可访问
    qos-port: 3333   # 提供qos的端口,默认 22222
6.1、使用方式
# 在终端使用telnet命令
telnet ip qos-port
6.2、常用命令
# 1、列出来该实例服务提供者与调用者状态
ls
# 2、服务上线,可以指定某个接口,也可以什么也不指定,这样就是全部
online [接口全限定名]
# 3、服务下线,可以指定某个接口,也可以什么也不指定,这样就是全部
offline [接口全限定名]
# 4、查看命令的用途,不带参数显示全部命令,带参数只显示指定的
help
# 5、退出Qos
quit

总结:本文介绍Dubbo的使用,分别使用zookeeper和nacos作为注册中心的配置,详细说明dubbo每个注解的作用,以及如何指定使用协议、通讯方式和序列化方式;最后介绍dubbo实现服务治理通过如何控制台实现。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:上了年纪的小男孩。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的图像剪切(ROI)功能(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的图像剪切&#xff08;ROI&#xff09;功能&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的图像剪切&#xff08;ROI&#xff09;功能的技术背景CameraExplorer如何使用图像剪切&#xff08;ROI&#xff09;功…

【网络安全 | Misc】normal_png

方法一 可以通过stegsolve或winhex看到图片高度被改写&#xff1a; 改为&#xff1a; 再保存图片即可&#xff1a; flag{B8B68DD7007B1E406F3DF624440D31E0}方法二 使用脚本查看宽高是否被修改&#xff1a; import zlib import struct import argparse import itertoolspars…

【开源】基于Vue+SpringBoot的学生综合素质评价系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生功能2.2 教师功能2.3 教务处功能 三、系统展示四、核心代码4.1 查询我的学科竞赛4.2 保存单个问卷4.3 根据类型查询学生问卷4.4 填写语数外评价4.5 填写品德自评问卷分 五、免责说明 一、摘要 1.1 项目介绍 基于J…

Java集合/泛型篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、什么是list接口二、说说ArrayList(数组)三、Vector( 数组实现、 线程同步)四、说说LinkList(链表)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通…

百度沧海文件存储CFS推出新一代Namespace架构

随着移动互联网、物联网、AI 计算等技术和市场的迅速发展&#xff0c;数据规模指数级膨胀&#xff0c;对于分布式文件系统作为大规模数据场景的存储底座提出了更高的要求。已有分布式文件系统解决方案存在着短板&#xff0c;只能适应有限的场景&#xff1a; >> 新型分布式…

双指针刷题(三)

所有算法文章链接&#xff08;最底部&#xff09; http://t.csdnimg.cn/IbllR 1.有效三角形个数 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 1.分析题意 给一个非负的数组&#xff0c;判断这个数组能组成多少个三角形。 2.解题思路 补充知识…

Python:正则表达式速通,码上上手!

1前言 正则表达式&#xff08;Regular Expression&#xff09;是一种用来描述字符串模式的表达式。它是一种强大的文本匹配工具&#xff0c;可以用来搜索、替换和提取符合特定模式的文本。 正则表达式由普通字符&#xff08;例如字母、数字、符号等&#xff09;和元字符&#…

NFS的基本使用

#江南的江 #每日鸡汤&#xff1a;岁月匆匆&#xff0c;时光荏苒&#xff0c;感悟人生路漫漫&#xff0c;不忘初心方得始终。 #初心和目标&#xff1a;和从前的自己博弈。 NFS(存储共享服务) 本文要点摘要&#xff1a; 下面将讨论什么是NFS&#xff0c;如何配置NFS&#xff0c;…

自然语言处理(第17课 文本分类和聚类)

一、学习目标 1.学习文本分类的两种传统机器学习方法&#xff1a;朴素贝叶斯和支持向量机 2.学习文本分类的深度学习方法 3.学习文本分类的性能评估标准 4.学习文本聚类的相似性度量、具体算法、性能评估 二、文本分类 1.概述 将文本分类&#xff0c;主要工作是让机器分析文…

迅为RK3588开发板RTMP推流之视频监控之搭建 RTMP 媒流体服务器

1.安装 nginxrtmp 运行所要用到的库和依赖环境 apt-get update apt-get install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev openssl 2. 下 载 nginx-1.20.2 源 码 ( 下 载 地 址 &#xff1a; http://nginx.org/download/nginx-1.20.2.tar.gz) 和nginx-…

【力扣题解】P226-翻转二叉树-Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P226-翻转二叉树-Java题解&#x1f30f;题目描述&#x1f4a1;题解&#x1f30f;总结…

MySQL高级SQL语句补充

目录 1.空值&#xff08;NULL&#xff09;和 无值&#xff08; &#xff09;的区别 2.正则表达式 3.存储过程 存储过程的优点 创建存储过程 调用存储过程 查看存储过程 存储过程的参数 IN 输入参数 OUT 输出参数 INOUT 输入输出参数 删除存储过程 存储过程的控制语…

QT中的信号与槽的讲解

文章目录 信号及其特点槽及其特点代码演示标准信号与标准槽函数方式一方式二 自定义信号和槽connect()函数信号和槽函数存在函数重载的情况下Qt的信号槽机制注意事项 信号及其特点 信号&#xff1a;是一种特殊的函数&#xff0c;又称信号函数&#xff0c;俗称信号&#xff0c;…

vue 项目 添加 页面上方 NProgress进度条

NProgress官网和Github地址 路由 跳转时 页面上方 和 右上角 会有一个加载进度 安装 使用npm安装 npm install --save nprogress 基本用法 main.js 引入 import NProgress from “nprogress”; import “nprogress/nprogress.css”; 开关和关闭 start()开启NProgress进度条d…

李宏毅 自然语言处理(Voice Conversion) 笔记

前一章笔记&#xff1a;李宏毅 自然语言处理&#xff08;Speech Recognition&#xff09; 笔记 引入 什么是voice conversion&#xff1f; 输入一段声音&#xff0c;输出另一段声音&#xff0c;我们希望这两端声音&#xff1a;内容一样&#xff0c;其他方面不一样&#xff08…

移动硬盘打不开怎么办?没有比这更好的办法了

移动硬盘打不开是常见故障&#xff0c;可能的原因有很多&#xff0c;例如硬盘驱动器故障、文件系统损坏、分区表错误等。本文将详细分析这些原因&#xff0c;并提供相应的解决方法&#xff0c;帮助您解决移动硬盘打不开的问题。 当移动硬盘打不开时&#xff0c;为了保留其中的文…

web:[BJDCTF2020]The mystery of ip(ssti模板注入、Smarty 模板引擎)

题目 进入页面显示如下 点击flag页面得到ip 点击hint页面 在hint.php的源代码页面中发现 由题目可以知道要从ip入手 这里尝试抓包加上X-Forwarded-For请求头修改为127.0.0.1 因为直接将127.0.0.1输出到页面&#xff0c;可以猜测是ssti模板注入 可以继续验证 这里发现输入什么…

<JavaEE> TCP 的通信机制(四) -- 流量控制 和 拥塞控制

目录 TCP的通信机制的核心特性 五、流量控制 1&#xff09;什么是“流量控制”&#xff1f; 2&#xff09;如何做到“流量控制”&#xff1f; 3&#xff09;“流量控制”的作用 六、拥塞控制 1&#xff09;什么是“拥塞控制”&#xff1f; 2&#xff09;如何做到“拥塞…

用通俗易懂的方式讲解大模型:ChatGLM3-6B 部署指南

最近智谱 AI 对底层大模型又进行了一次升级&#xff0c;ChatGLM3-6B 正式发布&#xff0c;不仅在性能测试和各种测评的数据上有显著提升&#xff0c;还新增了一些新功能&#xff0c;包括工具调用、代码解释器等&#xff0c;最重要的一点是还是保持 6B 的这种低参数量&#xff0…

ESP32入门八(DHT温湿度传感器)

在本章中&#xff0c;将介结DHT温湿度传感器的使用&#xff0c;本文中所使用的版本为DHT11。 传感器介绍 DHT11是一款有已校准数字信号输出的温湿度传感器。 精度湿度5%RH&#xff0c; 温度2℃&#xff0c;量程湿度5~95%RH&#xff0c; 温度-20~60℃ 图样&#xff1a; 以下为…