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
传输,单一、异步、长连接
,适合数据量小、高并发和服务提供者远远少于消费者的场景。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通