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 2022-03-23 15:48  irongzone  阅读(90)  评论(0)    收藏  举报