随笔 - 13  文章 - 0  评论 - 2  阅读 - 3419

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

  Feign是Spring Cloud提供的一个声明式的伪Http客户端,它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。
Nacos注册中心很好的兼容了Feign,Feign默认集成了Ribbon,所以在Nacos下使用Fegin默认就实现了负载均衡的效果。

  基于Http传输协议,短连接,不适合高并发的访问。

Dubbo

  Dubbo是阿里巴巴开源的基于Java的高性能RPC分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

  利用NettyTCP传输,单一、异步、长连接,适合数据量小、高并发和服务提供者远远少于消费者的场景。

 

posted on   irongzone  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 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
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示