官网:https://cn.dubbo.apache.org/zh-cn
1 dubbo介绍
Dubbo不仅仅是一个RPC框架,更是一个成熟的微服务框架。官网是这么定义Dubbo的:“Apache Dubbo 是一款微服务框架,为大规模 微服务实践提供高性能 RPC 通信、流量治理、可观测性等解决方案”。它包括以下功能:
- 面向接口代理的高性能RPC调用,提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节
- 智能负载均衡,内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量
- 服务自动注册与发现,支持多种注册中心服务,服务实例上下线实时感知
- 可视化的服务治理与运维,提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数
- 运行期流量调度,内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能
- 高度可扩展能力,遵循微内核+插件的设计原则,所有核心能力如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:protocol name="dubbo" port="29015"/> <bean id="userServiceImpl" class="com.test.service.UserServiceImpl"/> <dubbo:service interface="com.test.service.UserService" ref="userServiceImpl"> </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(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;
|
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
|
4 dubbo监控平台
https://github.com/apache/dubbo-admin