一文轻松入门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: 8081spring:application:name: dubbo-provider
dubbo:protocol:name: dubboport: 20881registry: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: 8081spring: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 {@Overridepublic 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,默认 trueqos-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版本)或者希望共同学习,关注微信公众号:上了年纪的小男孩。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

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

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

相关文章

Zabbix“专家坐诊”第221期问答汇总

问题一 Q&#xff1a;使用官方docker模板Template App Docker&#xff0c;监控docker镜像&#xff0c;有一项监控项docker.data_usage有报错&#xff0c;不知道哪里问题&#xff1a;Cannot fetch data: Get “http://1.28/system/df”: context deadline exceeded (Client.Time…

LVGL 在framebuffer设备上的移植

LVGL 在framebuffer设备上的移植 ItemDescDate2023-12-31Authorhongxi.zhuplatformNXP I.MX6ULLLCDSPI TFTLCD NV3030B 文章目录 LVGL 在framebuffer设备上的移植一、LVGL源码获取二、源码修改适配三、编译&运行补充 一、LVGL源码获取 新建lvgl_imx6ull文件夹&#xff0c…

CSP CCF 201409-2 画图 C++满分题解

解题思路&#xff1a; 1.使用二维数组标记每一个方块是否被涂色。 2.注意坐标代表的是点&#xff0c;不是方块&#xff0c;交界处的坐标只能算一个方块。 3.可以看成&#xff1a;每一个坐标都对应它左上角的一个小方块&#xff0c;这样可以避免重复计算方块数 #include<i…

25、商城系统(七):商城项目基础功能pom.xml(重要),mybatis分页插件

截止这一章,我们就不把重心放在前端,后台的基础代码,因为后面都是业务层面的crud。 前端直接替换这两个文件夹即可,后台代码也直接复制: 一、重新更新一下所有的pom.xml 这个地方我踩了好多坑,最后得到一个完整的pom.xml,建议大家直接用我的pom.xml替换即可。 1.comm…

05 HAL库驱动蜂鸣器唱出一首小歌

目录 一、蜂鸣器的基本知识 1、有源蜂鸣器 2、无源蜂鸣器 二、PWM的相关知识 1. PWM概念 2. PWM常见参数 3.PWM基本结构 三、蜂鸣器发出音调的原理 四、频率计算 五、实验开始 一、蜂鸣器的基本知识 蜂鸣器是一种能够发出持续而连续的声音的电子设备&#xff0c;它被…

【Kubernetes】kubectl 常用命令

kubectl 常用命令 1.基础命令2.部署命令3.集群管理命令4.故障诊断与调试命令5.高级命令6.设置命令7.其他命令 kubectl 是 Kubernetes 提供的命令行管理工具。通过使用 kubectl&#xff0c;可以管理和操作 Kubernetes。 1.基础命令 命令 说明 create通过文件名或标准输入创建 …

2023年03月22日_腾讯2022年财报解读

文章目录 1 - 腾讯营收增长停滞2 - 腾讯游戏业务低迷3 - 小程序和视频号拉动广告增长4 - 腾讯云和金融科技表现不佳5 - 营销费用减半6 - 裁员但福利上涨 2023年03月22日 今天晚上呢 腾讯披露了2022年第四季度和全年的财报 看过之后呢不禁要说 腾讯在2022年真的是过得不容易啊…

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项样题卷③

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项&#xff08;高职组&#xff09; 样题&#xff08;第3套&#xff09; 目录 2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项&#xff08;高职组&#xff09; 样题&#xff08;第3套&#xff09; 模块…

Python序列之集合

系列文章目录 Python序列之列表Python序列之元组Python序列之字典Python序列之集合&#xff08;本篇文章&#xff09; Python序列之集合 系列文章目录前言一、集合是什么&#xff1f;二、集合的操作1.集合的创建&#xff08;1&#xff09;使用{}创建&#xff08;2&#xff09;…

[python]基于faster whisper实时语音识别语音转文本

语音识别转文本相信很多人都用过&#xff0c;不管是手机自带&#xff0c;还是腾讯视频都附带有此功能&#xff0c;今天简单说下&#xff1a; faster whisper地址&#xff1a; https://github.com/SYSTRAN/faster-whisperhttps://link.zhihu.com/?targethttps%3A//github.com…

docker小白第十天

redis集群主从容错切换案例 3主3从的redis集群&#xff0c;某个主机宕机了&#xff0c;需要对应的从机补位。 docker exec -it redis-node-1 /bin/bash # 进入容器1的命令行 redis-cli -p 6381 # 进入节点1的命令行 cluster nodes # 查看集群信息可以看到1号和6号对应是主从关…

HTML教程(1)——概述和第一个网页

一、什么是HTML HTML 是用来描述网页的一种语言。 HTML 指的是超文本标记语言 (Hyper Text Markup Language)HTML 不是一种编程语言&#xff0c;而是一种标记语言 (markup language)标记语言是一套标记标签 (markup tag)HTML 使用标记标签来描述网页 二、什么是HTML 标签 H…