Dubbo-初识

官网:https://cn.dubbo.apache.org/zh-cn

1 dubbo介绍

Dubbo不仅仅是一个RPC框架,更是一个成熟的微服务框架。官网是这么定义Dubbo的:“Apache Dubbo 是一款微服务框架,为大规模 微服务实践提供高性能 RPC 通信、流量治理、可观测性等解决方案”。它包括以下功能:

  1. 面向接口代理的高性能RPC调用,提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节
  2. 智能负载均衡,内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量
  3. 服务自动注册与发现,支持多种注册中心服务,服务实例上下线实时感知
  4. 可视化的服务治理与运维,提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数
  5. 运行期流量调度,内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能
  6. 高度可扩展能力,遵循微内核+插件的设计原则,所有核心能力如Protocol、Transport、Serialization被设计为扩展点,平等对待内置实现和第三方实现

整体架构:

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

2 基本使用

spring xml配置(了解,目前都是基于注解去实现):

1
2
3
4
5
6
7
8
9
10
<dubbo:application name="dubbo_provider"/>
<dubbo:provicer timeout="5000"/>
<!-- 注册中心地址 -->
<dubbo:regitry address="zookeeper://192.168.0.1:2184" check="false"/>
<!-- 如果协议是dubbo的话,这个就是netty服务端绑定的端口,默认是20880 -->
<dubbo:protocol name="dubbo" port="29015"/>
<bean id="userServiceImpl" class="com.test.service.UserServiceImpl"/>
<dubbo:service interface="com.test.service.UserService" ref="userServiceImpl">
<!-- <dubbo:method name="" /> -->
</dubbo:service>

引入依赖:

1
2
3
4
5
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>3.0.2.1</version>
</dependency>

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//接口
public interface UserService{
String queryUser(String var1);

void doKill(String var1);
}

//生产者
//@DubboService注解就是服务暴露的注解
@DubboService(methods = {@Method(name = "doKill",executes = 10,actives = 10)},connections = 10,protocol = "dubbo")
public class UserServiceImpl implements UserService {
@Override
public String queryUser(String s) {
String username = RpcContext.getContext().getAttachment("username");
System.out.println(username);
System.out.println("=======provider======" + s);
return "OK--" + s;
}
@Override
public void doKill(String s) {
System.out.println("=======provider======" + s);
}
}

//消费者
@DubboReference(check = false,protocol = "dubbo",retries = 3,timeout = 1000000000,cluster = "failover",loadbalance = "random",sticky = true,methods = {@Method(name = "doKill",isReturn = false)}/*,url = "dubbo://localhost:20880"*/)
UserService userService;

//在启动类上加入注解@EnableDubbo(scanBasePackages = "com.test")即可使用dubbo

3 引入注册中心zookeeper

引入依赖

1
2
3
4
5
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<type>pom</type>
</dependency>

配置文件:

1
2
3
4
5
dubbo.application.name=dubbo_provider
dubbo.registry.address=zookeeper://${zookeeper.address:127.0.0.1}:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
#dubbo.protocol.port=-1 自动生成不冲突的端口

4 dubbo监控平台

https://github.com/apache/dubbo-admin


Dubbo-初识
http://www.zivjie.cn/2023/05/13/中间件/dubbo/Dubbo-初识/
作者
Francis
发布于
2023年5月13日
许可协议