Dubbo
1、Dubbo 简介
Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。
服务是 Dubbo 中的核心概念,一个服务代表一组 RPC 方法的集合,服务是面向用户编程、服务发现机制等的基本单位。Dubbo 开发的基本流程是:用户定义 RPC 服务,通过约定的配置 方式将 RPC 声明为 Dubbo 服务,然后就可以基于服务 API 进行编程了。
1.1 Dubbo详情
1、A与B建立网络连接
2、传递数据(序列化、反序列化【xml、json、二进制流】)
2、架构
服务发现
服务发现,即消费端自动发现服务地址列表的能力,是微服务框架需要具备的关键能力,借助于自动化的服务发现,微服务之间可以在无需感知对端部署位置与 IP 地址的情况下实现通信。
实现服务发现的方式有很多种,Dubbo 提供的是一种 Client-Based 的服务发现机制,通常还需要部署额外的第三方注册中心组件来协调服务发现过程,如常用的 Nacos、Consul、Zookeeper 等,Dubbo 自身也提供了对多种注册中心组件的对接,用户可以灵活选择。
面向接口代理,服务以接口为粒度
负载均衡
服务自动注册与发现

服务发现的一个核心组件是注册中心,Provider 注册地址到注册中心,Consumer 从注册中心读取和订阅 Provider 地址列表。 因此,要启用服务发现,需要为 Dubbo 增加注册中心配置:
以 dubbo-spring-boot-starter 使用方式为例,增加 registry 配置
dubbo: application: logger: slf4j name: ${ino.artifctId} registry: protocol: nacos # dubbo要注册到对应的命名空间里面去作为区分 address: ${ino.nacos-serer-adr}?namespace=${ino.nacos-namespace} check: false group: ${ino.naos-goup} protocol: # 协议 name: dubbo port: -1 provider: timeout: 100000 scan: base-packages: com.m1p.**.service consumer: check: false
启用dubbo
@SpringBootApplication(scanBasePackages = {"com.iaa", "com.iaafrawork.sdk"})
@EnableDiscoveryClient
@EnableDubbo // 启用dubbo
@EnableAsync
@MapperScan("com.iaa.**.mapper")
@EnableCaching
public class ScpBizApplication {
public static void main(String[] args) {
System.setProperty("dubbo.application.logger", "slf4j");
SpringApplication.run(ScpBizApplication.class, args);
}
}
部署架构
注册中心 配置中心 元数据中心
- 注册中心。协调 Consumer 与 Provider 之间的地址注册与发现
- 配置中心。
- 存储 Dubbo 启动阶段的全局配置,保证配置的跨环境共享与全局一致性
- 负责服务治理规则(路由规则、动态配置等)的存储与推送。
- 元数据中心。
- 接收 Provider 上报的服务接口元数据,为 Admin 等控制台提供运维能力(如服务测试、接口文档等)
- 作为服务发现机制的补充,提供额外的接口/方法级别配置信息的同步能力,相当于注册中心的额外扩展。

3、Dubbo使用
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
<!-- dubbo依赖 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.0</version>
</dependency>
<!-- 注册中心使用zookeeper,引入操作zookeeper的客户端 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<!-- 注册中心使用nacos -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>${dubbo.version}</version>
</dependency>
在实现类中使用注解
@Slf4j @Service @DubboService(version = "1.0.0") public class DemoServiceImpl implements DemoService {
private final DemoMapper demoMapper
@Override
public void insertOrUpdate() {
demoMapper.insertOrUpdate();
}
}
使用
@Slf4j @Service public class demoPOServiceImpl implements demoPOService {
@DubboReference(version = "1.0.0")
private DemoService service;
@Override
public void execute() {
service.insertOrUpdate();
}
}
注:@Service 和 @Reference 在新版本 @Deprecated
4、Dubbo和Feign对比
https://www.cnblogs.com/ying-z/p/14781757.html
实现远程调用的方式:Http接口(web接口、RestTemplate+Okhttp)、Feign、RPC调用(Dubbo、Socket编程)、Webservice。
Feign
基于Http传输协议,短连接,不适合高并发的访问。
Dubbo
Dubbo是阿里巴巴开源的基于Java的高性能RPC分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
利用Netty,TCP传输,单一、异步、长连接,适合数据量小、高并发和服务提供者远远少于消费者的场景。
浙公网安备 33010602011771号