远程调用技术
RestFul风格
基于HTTP协议实现,而HTTP是一种网络传输协议,基于TCP,规定了数据传输的格式。
RPC协议
基于RPC协议实现的框架
3.gRPC:Google 于 2015 年对外开源的跨语言 RPC 框架,支持多种语言。
通信性能方面
从通信性能方面来说,HTTP协议属于应用层(OSI七层模型),底层实现是REST。
缺点:在高并发的场景下性能不够理想,成为性能瓶颈
RPC应用
- 屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项目内的方法
-
隐藏底层网络通信的复杂性,让我们更加专注业务逻辑。
RPC是一种技术思想而非一种规范或协议。
概述
Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。
作用:
庞大的用户群体
Dubbo3 已在阿里巴巴成功落地,实现了对老版本 HSF2 框架全面升级,成为阿里集团面向云原生时代的统一服务框架底座,庞大的用户群体是 Dubbo 保持稳定性、需求来源、先进性的基础。
Dubbo 不是什么?
不是 gRPC 协议的替代品
Dubbo 支持基于 gRPC 作为底层通信协议,在 Dubbo 模式下使用 gRPC 可以带来更好的开发体验,享有统一的编程模型和更低的服务治理接入成本
不只有 Java 语言实现
自 Dubbo3 开始,Dubbo 提供了 Java、Golang、Rust、Node.js 等多语言实现,未来会有更多的语言实现。
Dubbo的简单使用
- 创建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>
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启动时检查
@DubboReference ( check = false )
Dubbo地址缓存
因为 Dubbo 服务消费者在 第一次调用时 , 会将服务提供方地址缓存到本地 , 以后在调用则不会访问注册中心 。服务提供者地址发生变化时,注册中心会通服务消费者。
Dubbo超时时间与配置覆盖关系
#使用timeout属性配置超时时间,默认值1000,单位毫秒
@DubboService ( timeout = 3000 )