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: -1registry:address: nacos://ip:portserver: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*/@Overridepublic 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 )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51649.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优思学院|抽样检验的概念和21种抽样方式

抽样检验的概念 根据事先制定的抽样方案&#xff0c;从一批产品中随机抽取一部分作为样品&#xff0c;以这部分样品的检验结果&#xff0c;对整批产品质量合格与否作出判定的活动过程&#xff0c;称为抽样检验。除了用于质量控制之外&#xff0c;抽样检验同样适用于在六西格玛…

AI工作流程设计的自动化优化:微软与斯坦福的新成果 - Trace

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

学习网络安全 为什么Linux首择Kali Linux? 以及如何正确的使用Kali Linux

1.什么是kali linux&#xff1f; Kali Linux是一款基于Debian的Linux发行版&#xff0c;主要用于网络安全测试和渗透测试。它由全球顶尖的安全专家和黑客社区维护开发&#xff0c;提供了丰富的工具和资源&#xff0c;用于测试安全性、漏洞利用和渗透测试。此外&#xff0c;Kal…

修复msvcp120.dll丢失的问题的几种简单方法,msvcp120.dll是什么

在使用电脑时&#xff0c;你可能会遭遇一个提示称“msvcp120.dll丢失”的错误信息。这个问题比较普遍&#xff0c;主要是因为你的系统中缺失了某个特定的动态链接库&#xff08;DLL&#xff09;文件。msvcp120.dll是由 Microsoft Visual C 可再发行包提供的关键文件&#xff0c…

一键切换阿里yum源(包括其他系统repo镜像查找方法)

一键切换阿里yum源 示例命令其他系统repo镜像GitHub文档 示例命令 # 备份旧源 mv CentOS-Base.repo CentOS-Base.repo.bak # 添加新源(阿里镜像源) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo其他系统repo镜像 这里的示例是用…

create-vue项目的README中文版

使用方法 要使用 create-vue 创建一个新的 Vue 项目&#xff0c;只需在终端中运行以下命令&#xff1a; npm create vuelatest[!注意] (latest 或 legacy) 不能省略&#xff0c;否则 npm 可能会解析到缓存中过时版本的包。 或者&#xff0c;如果你需要支持 IE11&#xff0c;你…

链表篇-02.从尾到头打印链表(反转链表)

解题思路&#xff1a; 链表从尾到头打印链表, 我的思路是 用三个指针,第一个指针(pre)指向指向头节点的前一个位置&#xff0c;第二个指针(cur)指向头节点&#xff0c; 然后依次往后执行&#xff0c;第三个指针用于临时记录第二个指针的下一个位置。 代码详情: import java.…

2024年中职云计算实验室建设及云计算实训平台整体解决方案

随着信息技术的飞速发展&#xff0c;云计算作为新一代信息技术的核心&#xff0c;正逐步渗透到各行各业&#xff0c;成为推动数字化转型的重要力量。为了适应这一趋势&#xff0c;中职教育作为技能型人才培养的重要阵地&#xff0c;亟需加强云计算实验室建设与云计算实训平台的…

西门子s7协议

S7Comm&#xff08;S7 Communication&#xff09;是西门子专有的协议&#xff0c;是西门子S7通讯协议簇里的一种。 S7通信协议是西门子S7系列PLC内部集成的一种通信协议&#xff0c;是S7系列PLC的精髓所在。 它是一种运行在传输层之上的&#xff08;会话层/表示层/应用层&…

速记Java八股文——并发编程篇

前言 分类汇总 20 常见的 Java集合 经典后端面试题&#xff0c;并对题目进行了精炼总结&#xff0c;旨在帮助大家高效记忆&#xff0c;在面试中游刃有余&#xff0c;不至于陷入词穷的窘境。 Java 并发编程 多线程怎么使用的&#xff1f; 继承 Thread 类。实现 Runnable 接口。…

STL 简介(标准模板库)

前言 通过对C的特性&#xff0c;类和对象的学习和C的内存管理对C基本上有了全面的认识&#xff0c;但是C的核心在于STL 一、STL简介 什么是STL C STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;是C编程语言中一个功能强大的模板库&#xff0c;…

【Linux】CentOS更换国内阿里云yum源(超详细)

目录 1. 前言2. 打开终端3. 确保虚拟机已经联网4. 备份现有yum配置文件5. 下载阿里云yum源6. 清理缓存7. 重新生成缓存8. 测试安装gcc 1. 前言 有些同学在安装完CentOS操作系统后&#xff0c;在系统内安装比如&#xff1a;gcc等软件的时候出现这种情况&#xff1a;&#xff08…

前端 socket.io 跨域

在使用Socket.io进行前端跨域通信时&#xff0c;可以通过设置Socket.io的cors选项来允许跨域请求。 以下是一个简单的例子&#xff0c;展示了如何在Node.js的服务器代码中配置Socket.io以允许跨域连接&#xff1a; const express require(express); const http require(http…

【C++进阶学习】第九弹——哈希的原理与实现——开放寻址法的讲解

前言&#xff1a; 在前面&#xff0c;我们已经学习了很多存储机构&#xff0c;包括线性存储、树性存储等&#xff0c;并学习了多种拓展结构&#xff0c;效率也越来越高&#xff0c;但是是否有一种存储结构可以在大部分问题中都一次找到目标值呢&#xff1f;哈希可能能实现 目录…

Vite项目中根据不同打包命令配置不同的后端接口地址,proxy解决跨域

在vite.config.ts同级目录添加两个文件 .env.development #开发环境 VITE_APP_ENV developmentVITE_APP_BASE_API .env.production #生产配置 VITE_APP_ENV productionVITE_APP_BASE_API https://www.bdjw.work代码中使用路径 const request axios.create({baseURL: i…

Maven已经导入Junit包,但是还是无法使用注解

Maven已经导入Junit包&#xff0c;但是还是无法使用注解 背景&#xff1a; 导入了Junit的依赖 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></d…

【Python的GDAL/OGR库】

GDAL/OGR库是一个开源的地理数据处理库&#xff0c;用于读取、写入和转换各种地理数据格式。以下是对GDAL/OGR库的详细解释&#xff1a; GDAL&#xff08;Geospatial Data Abstraction Library&#xff09; 定义&#xff1a;GDAL是一个在X/MIT许可协议下的开源栅格空间数据转…

【初阶数据结构题目】2.移除元素

文章目录 顺序表算法题代码&#xff1a; 顺序表算法题 点击链接做题 移除元素 思路&#xff1a;定义两个变量指向数组第一个位置&#xff0c;判断nums[src]是否等于val 相等&#xff0c;src不相等&#xff0c;nums[dst] nums[src],src,dst 代码&#xff1a; int removeElem…

如何使用CANoe自带的TCP/IP Stack验证TCP的零窗口探测机制

如果想利用CANoe自带的TCP/IP协议栈验证TCP的零窗口探测机制,就必须添加一个网络节点并配置独立的CANoe TCP/IP协议栈,作为验证对象。而与它进行TCP通信的对端也是一个网络节点,但不要配置TCP/IP协议栈,而是使用CAPL代码在底层组装TCP报文模拟TCP通信过程。这样可以尽量减少…

postgrsql——事务概述

事务概述 事务的特性 原子性&#xff08;Atomicity&#xff09;&#xff1a; 事务被视为一个整体&#xff0c;其中的操作要么全部执行成功&#xff0c;要么全部不执行&#xff0c;即不存在部分执行的情况。这确保了事务的完整性和一致性。一致性&#xff08;Consistency&…