Spring-cloud Alibaba组件--Dubbo

远程调用技术

RestFul风格

 基于HTTP协议实现,而HTTP是一种网络传输协议,基于TCP,规定了数据传输的格式。

RPC协议 

Remote Produce Call 远程过程调用,类似的还有 RMI remote method invoke)。自定义数据格式,基于原生 TCP 通信,速度快,效率高。

基于RPC协议实现的框架

1.Dubbo:Dubbo 帮助解决微服务组件之间的通信问题,提供了基于 HTTP、HTTP/2、TCP 等的多种高性能通信协议实现,并支持序列化协议扩展,在实现上解决网络连接管理、数据传输等基础问题。
2. SpringCloud :国外 Pivotal 公司 2014 年对外开源的 RPC 框架,提供了丰富的生态组件。

3.gRPCGoogle 2015 年对外开源的跨语言 RPC 框架,支持多种语言。  

通信性能方面

 从通信性能方面来说,HTTP协议属于应用层(OSI七层模型),底层实现是REST。

缺点:在高并发的场景下性能不够理想,成为性能瓶颈

Dubbo 框架的通信协议采用 RPC 协议,属于传输层协议,性能上自然比 Rest 高。提升了交互的性
能,保持了长连接,高性能。

RPC应用

  1. 屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项目内的方法
  2. 隐藏底层网络通信的复杂性,让我们更加专注业务逻辑。

RPC是一种技术思想而非一种规范或协议。 

概述

       Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。

作用

微服务编程范式和工具
       Dubbo 支持基于 IDL 或语言特定方式的服务定义,提供多种形式的服务调用形式(如同步、异步、流式等)
高性能的 RPC 通信
        Dubbo 帮助解决微服务组件之间的通信问题,提供了基于 HTTP、HTTP/2、TCP 等的多种高性能通信协议实现,并支持序列化协议扩展,在实现上解决网络连接管理、数据传输等基础问题。
微服务监控与治理
        Dubbo 官方提供的服务发现、动态配置、负载均衡、流量路由等基础组件可以很好的帮助解决微服务基础实践的问题。除此之外,您还可以用 Admin 控制台监控微服务状态,通过周边生态完成限流降级、数据一致性、链路追踪等能力。
部署在多种环境
        Dubbo 服务可以直接部署在容器、Kubernetes、Service Mesh等多种架构下。
活跃的社区
        Dubbo 项目托管在 Apache 社区,有来自国际、国内的活跃贡献者维护着超 10 个生态项目,贡献者包括来自海外、阿里巴巴、工商银行、携程、蚂蚁、腾讯等知名企业技术专家,确保 Dubbo 及时解决项目缺陷、需求及安全漏洞,跟进业界最新技术发展趋势

庞大的用户群体

        Dubbo3 已在阿里巴巴成功落地,实现了对老版本 HSF2 框架全面升级,成为阿里集团面向云原生时代的统一服务框架底座,庞大的用户群体是 Dubbo 保持稳定性、需求来源、先进性的基础。

Dubbo 不是什么?

不是应用开发框架的替代者
        Dubbo 设计为让开发者以主流的应用开发框架的开发模式工作,它不是各个语言应用开发框架的替代者,如它不是 Spring/Spring Boot 的竞争者,当你使用 Spring 时,Dubbo 可以无缝的与 Spring & Spring Boot 集成在一起。
不仅仅只是一款 RPC 框架
        Dubbo 提供了内置 RPC 通信协议实现,但它不仅仅是一款 RPC 框架。首先,它不绑定某一个具体的 RPC 协议,开发者可以在基于 Dubbo 开发的微服务体系中使用多种通信协议;其次,除了 RPC 通信之外,Dubbo 提供了丰富的服务治理能力与生态。

不是 gRPC 协议的替代品

        Dubbo 支持基于 gRPC 作为底层通信协议,在 Dubbo 模式下使用 gRPC 可以带来更好的开发体验,享有统一的编程模型和更低的服务治理接入成本

不只有 Java 语言实现

        自 Dubbo3 开始,Dubbo 提供了 Java、Golang、Rust、Node.js 等多语言实现,未来会有更多的语言实现。

Dubbo的简单使用

  1. 创建SpringBoot项目,引入所需要的起步依赖
<!--        SpringBoot的起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<!--        SpringBoot整合Dubbo-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
<!--      dubbo注册到Nacos-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
        </dependency>
   2.编写  application.yml 配置文件
dubbo:
  application:
    #应用名字
    name: 应用名字
  protocol:
    #通讯协议
    name: dubbo
    #端口号 设置端口号为 -1 表示 dubbo 会自动分配一个可用的端口(从20880开始递增)
    port: -1
  registry:
    address: nacos://ip:port

server:
  port: 8001

 3.编写主启动类

@SpringBootApplication
@Slf4j
@EnableDubbo
public class ApplicationDubbo
{
    public static void main( String[] args )
    {
        SpringApplication.run(ApplicationDubbo.class, args);
        log.info("************服务启动成功*********");
    }
}

示例:

被调用的需要引入上述依赖,被调用的远程接口需要在其接口实现类上用注解(

@DubboService )标明,并将其注册到nacos中。
@DubboService
public class PaymentServiceImpl implements IPaymentService{
    /**
     *
     * @param id id
     * @return
     */
    @Override
    public String payment(Integer id) {
        return "hello dubbo";
    }
}

 调用方

需要在引入被调用的接口,并使用注解(@DubboReference()标明此接口是远程调用使用的

@DubboReference()
private IPaymentService paymentService;

Dubbo启动时检查

        Dubbo在启动时检查依赖得服务是否可用, Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true"
        @DubboReference ( check = false )

Dubbo地址缓存

注册中心挂了,服务是否可以正常访问?
因为 Dubbo 服务消费者在 第一次调用时 会将服务提供方地址缓存到本地 以后
在调用则不会访问注册中心 。服务提供者地址发生变化时,注册中心会通服务消费者。

 Dubbo超时时间与配置覆盖关系

Dubbo 解决机制
        Dubbo利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。
配置超时时间

#使用timeout属性配置超时时间,默认值1000,单位毫秒

@DubboService ( timeout = 3000 )
  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Victor故里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值