Apache Dubbo是一个流行的Java RPC框架,尤其是在中国。有很多项目使用Dubbo。虽然它正在通过适配Reactive StreamsService Mesh来实现未来的新版本Dubbo 3.0,但有许多遗留项目不可能在短期之内被彻底修改。

RSocket是一个支持Reactive Streams语义的二进制通讯协议,主要支持的通讯层包括TCP, WebSocketsAeron(UDP)。与传统RPC相比,它能够提高性能和可靠性。

1.什么是网关?

网关(或代理)是服务消费者和服务提供者之间的一个额外的协议转换器。
通常,该协议转换器将执行一些在两端都不容易完成的工作,以证明额外的协议转换器是正常的。例如,Spring Cloud最近发布了spring-cloud-gateway-rsocketWebSocket/RSocket)网关。网关作用是在两个协议之间进行转换。这样一来,REST客户端就不必修改代码,仍然可以享受RSocket的好处。

2.为什么我们需要一个网关?

没有人喜欢代码更改。更不用说大的代码更改了。RSocket为不同的语言提供了sdk。Java SDK基于Reactive Streams项目。functional programming(函数式编程风格)不仅对许多开发者来说具有较深的学习曲线,而且还为调试和跟踪带来了挑战。

因此,网关的需求是非常有必要的。网关将减少了客户端的代码更改。它适用于服务已经在RSocket中,而客户端仍然在传统RPC中案例。虽然它的效率不如点对点RSocket连接,但它是一个很好的折衷方案。

3.网关是如何工作的?

以下的两点必须牢记:

  • Dubbo是一个传统的RPC框架。转化成RSocket,它只有Mono返回类型,没有stream/Flux类型。

  • 服务提供者必须提供RSocket服务。否则,在两者之间添加网关就没有任何意义了。如果你们说同一种语言,为什么需要翻译?

4.Dubbo的工作原理

为了理解网关是如何工作的,我们需要回顾Dubbo是如何工作的。

节点角色说明

节点 角色说明
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器

调用关系说明

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。详细的参考Apache Dubbo官网。

使用网关,服务的提供者现在不需要向注册中心注册。相反,它将在网关上创建一个接口并将该接口注册到注册中心。当服务的消费者请求服务时,它将获得网关上的接口。然后,网关将该请求分发给服务提供者。

让我们来看下面的代码:

这是一个Dubbo服务接口

public interface DemoService {String findNickById(Integer id);
}

注意,DemoService服务只是在网关上创建的一个接口,并将该接口注册到注册中心

服务的消费者现在发送一个RPC请求:

 public ApplicationRunner runner() throws Exception {return args -> {DemoService demoService = (DemoService) Proxy.newProxyInstance(DemoService.class.getClassLoader(),new Class[]{DemoService.class},new DubboServiceCallInvocationHandler(proxyService, DemoService.class, ""));System.out.println(demoService.findNickById(1));};}

因为,它不知道这个服务现在是一个RSocket服务。它不使用MonoFlux

在网关上,它将把请求发送到具有相同名称的RSocket服务。

@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {return dubbo2ReactiveProxy.invoke(serviceName, method.getName(), version, args);}

这就是RSocket服务接口。请记住它只有Mono类型。

public interface ReactiveUserService {Mono<User> findUserById(Long id);
}

我们不需要将ReactiveUserService注册到注册中心。

5.结论

在这个简单的示例中,我们演示了如何使用网关在Dubbo RPC服务消费者去调用RSocket服务提供者的服务。RSocket有非常多的用例,这些用例并不需要我们在两端(服务提供方和服务消费方)都修改代码。网关架构可以扩展到连接到其他协议和产品,如数据库消息队列

参考代码:https://github.com/apache/dubbo-samples/blob/3.x/dubbo-samples-rsocket

参考链接:https://dzone.com/articles/dubbo-rsocket-gateway

Apache Dubbo RSocket Gateway 入门教程相关推荐

  1. apache thrift_Apache Thrift快速入门教程

    apache thrift Thrift是一种跨语言RPC框架,最初是在Facebook上开发的,现在作为Apache项目开源. 这篇文章将描述如何以不同的模式(例如阻塞,非阻塞和异步)编写Thrif ...

  2. linux apache gzip压缩,Linux入门教程:配置Apache开启gzip压缩传输,gzip压缩 LoadModul

    Linux入门教程:配置Apache开启gzip压缩传输,gzip压缩 LoadModul 开启模块 打开httpd.conf后,先将下面两行配置前面的#号去掉,这样apache就会启用这两个模块,其 ...

  3. Apache Solr入门教程

    转自:http://blog.csdn.net/u011936655/article/details/51960005 Apache Solr入门教程(初学者之旅) 写在前面:本文涉及solr入门的各 ...

  4. Apache Thrift快速入门教程

    Thrift是一种跨语言RPC框架,最初是在Facebook上开发的,现在作为Apache项目开源. 这篇文章将描述如何以不同的模式(例如阻塞,非阻塞和异步)编写Thrift服务和客户端. (我觉得后 ...

  5. dubbo-快速入门-分布式RPC框架Apache Dubbo

    文章目录 分布式RPC框架Apache Dubbo 1. 软件架构的演进过程 1.1 单体架构 1.2 垂直架构 1.3 SOA架构 1.4 微服务架构 2. Apache Dubbo概述 2.1 D ...

  6. Apache Camel入门教程

    Apache Camel入门教程 本文我们学习Apache Camel,介绍基本概念并重点探讨消息路由.从基本概念和术语开始,然后通过介绍两种方式定义路由----java dsl 和 Spring d ...

  7. Apache POI(Word)教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 IT宝库整理的Apache POI Word入门教程 - 从基本到高级概念的简单简单步骤学习Apache POI Word,其中包括概述,Apache POI安装,核心类,文档,段落,边框, ...

  8. 微服务网关:SpringCloud Gateway保姆级入门教程

    什么是微服务网关 SpringCloud Gateway是Spring全家桶中一个比较新的项目,Spring社区是这么介绍它的: 该项目借助Spring WebFlux的能力,打造了一个API网关.旨 ...

  9. 什么是微服务网关?SpringCloud Gateway保姆级入门教程

    什么是微服务网关 SpringCloud Gateway是Spring全家桶中一个比较新的项目,Spring社区是这么介绍它的: 该项目借助Spring WebFlux的能力,打造了一个API网关.旨 ...

最新文章

  1. 基于psr规范php框架,PHP-PSR规范
  2. 机器学习的数学基础(1)--Dirichlet分布
  3. shell sqlplus执行sql文_各主流数据库非交互执行
  4. DevC++如何安装自定义头文件并使用
  5. CSDN 十大技术主题盘点-云原生篇
  6. Pycharm回车之后不能换行或不能缩进的解决方法
  7. latex安装包_Latex安装包及模版教程!数学专业必备!美赛神器!
  8. 数据流重导向 -- 第11章   认识与学习 BASH
  9. 微软官方的.net系列文档
  10. u盘魔术师装linux,小白也能学会的U盘魔术师重装系统教程
  11. win7系统 winload.efi 文件损坏 报 0xc0000428 错误 不重装系统解决方法
  12. 为什么我的世界服务器显示红叉,我的世界藏宝图怎么看红叉
  13. 南阳师范计算机与信息技术学院,刘军(计算机与信息技术学院)老师 - 南阳师范学院 - 院校大全...
  14. typecho插件,typechoSEO插件,typecho程序插件
  15. 常见软件架构风格介绍
  16. 【office】无法卸载office?
  17. 【爬虫学习笔记day44】5.2. (scrapy案例二)阳光热线问政平台爬虫
  18. WPF学习之绘图和动画--DarrenF
  19. Java的Modifier
  20. 管理好你的20~30岁

热门文章

  1. EaseUS Todo Backup for Mac(mac数据备份软件)
  2. QQ游戏怎么引流?如何利用QQ游戏引流让别人加你?
  3. 设计一台嵌入式CISC模型机
  4. linux查询当前主机的IP地址,根据ip地址查询其他主机名(Linux)
  5. CANOpen系列教程01_初识CAN与CANOpen及相关内容
  6. IEDA如何设置背景图片
  7. c语言定义不定长数组初始化_C语言如何定义一组长度不定的数组?
  8. 广电“科技少年”科普大赛在广州紫泥堂基地圆满闭幕
  9. 华为云MVP马超:云原生时代开发者的挑战与出路
  10. 卤味店,如何在低线城市挣钱