Dubbo是一个高性能、轻量级的开源分布式服务框架,最初由阿里巴巴开发并开源。它提供了服务注册、发现、调用和负载均衡等分布式服务治理功能,旨在简化分布式系统的开发和维护。
Dubbo框架的核心概念:
服务提供者(Provider):提供具体服务实现的节点。
服务消费者(Consumer):调用远程服务的节点。
注册中心(Registry):服务的注册与发现中心,用于提供服务地址和元数据的管理。
监控中心(Monitor):用于收集和展示服务调用的统计数据。
配置中心(Config Center):用于集中管理Dubbo框架的配置信息。
通信协议(Protocol):定义服务调用的方式,支持多种协议,如Dubbo协议、HTTP协议等。
负载均衡(Load Balance):在服务提供者集群中选择合适的节点进行负载均衡。
集群容错(Cluster):处理服务调用的容错机制,提高系统的可用性。
服务路由(Router):根据路由规则决定服务调用的路径。
dubbo3.2.1及以上版本支持springboot3,需要使用jdk17+
?添加依赖,如下:
<!-- 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
?添加依赖,如下:
<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
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";
}
}
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();
}
}
public interface UserService {
String getUser();
}
?注:要在provider模块和consumer模块中都要引入common模块
@SpringBootApplication
@EnableDubbo // 开启dubbo注解扫描
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
注:以下注解只适用于dubbo,如果接口还要提供springcloud服务,Spring还需要添加对应注解。
// 1、@EnableDubbo
扫描本包及其子包下使用@DubboService注解的类,[这样的话就可以不用再调用端添加],可以使用@DubboComponentScan指定扫描的包。
// 2、@DubboService
将标注类进行实例化并且发布成RPC服务,类似于Spring的@Component。
// 3、@DubboReference
注入远端服务的代理对象,类似于Spring的@Autowired。
注:在应用中,设置不同的通信方式或者不同的序列化方式,都需要引入相关依赖,例如:
<!-- 更改通信方式 -->
<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>
???????在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
# 在终端使用telnet命令
telnet ip qos-port
# 1、列出来该实例服务提供者与调用者状态
ls
# 2、服务上线,可以指定某个接口,也可以什么也不指定,这样就是全部
online [接口全限定名]
# 3、服务下线,可以指定某个接口,也可以什么也不指定,这样就是全部
offline [接口全限定名]
# 4、查看命令的用途,不带参数显示全部命令,带参数只显示指定的
help
# 5、退出Qos
quit
总结:本文介绍Dubbo的使用,分别使用zookeeper和nacos作为注册中心的配置,详细说明dubbo每个注解的作用,以及如何指定使用协议、通讯方式和序列化方式;最后介绍dubbo实现服务治理通过如何控制台实现。
????????本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:上了年纪的小男孩。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)