Apache Dubbo RSocket Gateway 入门教程
Apache Dubbo
是一个流行的Java RPC
框架,尤其是在中国。有很多项目使用Dubbo
。虽然它正在通过适配Reactive Streams
和 Service Mesh
来实现未来的新版本Dubbo 3.0
,但有许多遗留项目不可能在短期之内被彻底修改。
RSocket
是一个支持Reactive Streams
语义的二进制通讯协议,主要支持的通讯层包括TCP, WebSockets
和Aeron(UDP)
。与传统RPC
相比,它能够提高性能和可靠性。
1.什么是网关?
网关(或代理)是服务消费者和服务提供者之间的一个额外的协议转换器。
通常,该协议转换器将执行一些在两端都不容易完成的工作,以证明额外的协议转换器是正常的。例如,Spring Cloud最近发布了spring-cloud-gateway-rsocket
(WebSocket/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 | 服务运行容器 |
调用关系说明
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
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
服务。它不使用Mono
或Flux
。
在网关上,它将把请求发送到具有相同名称的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 入门教程相关推荐
- apache thrift_Apache Thrift快速入门教程
apache thrift Thrift是一种跨语言RPC框架,最初是在Facebook上开发的,现在作为Apache项目开源. 这篇文章将描述如何以不同的模式(例如阻塞,非阻塞和异步)编写Thrif ...
- linux apache gzip压缩,Linux入门教程:配置Apache开启gzip压缩传输,gzip压缩
LoadModul
Linux入门教程:配置Apache开启gzip压缩传输,gzip压缩 LoadModul 开启模块 打开httpd.conf后,先将下面两行配置前面的#号去掉,这样apache就会启用这两个模块,其 ...
- Apache Solr入门教程
转自:http://blog.csdn.net/u011936655/article/details/51960005 Apache Solr入门教程(初学者之旅) 写在前面:本文涉及solr入门的各 ...
- Apache Thrift快速入门教程
Thrift是一种跨语言RPC框架,最初是在Facebook上开发的,现在作为Apache项目开源. 这篇文章将描述如何以不同的模式(例如阻塞,非阻塞和异步)编写Thrift服务和客户端. (我觉得后 ...
- dubbo-快速入门-分布式RPC框架Apache Dubbo
文章目录 分布式RPC框架Apache Dubbo 1. 软件架构的演进过程 1.1 单体架构 1.2 垂直架构 1.3 SOA架构 1.4 微服务架构 2. Apache Dubbo概述 2.1 D ...
- Apache Camel入门教程
Apache Camel入门教程 本文我们学习Apache Camel,介绍基本概念并重点探讨消息路由.从基本概念和术语开始,然后通过介绍两种方式定义路由----java dsl 和 Spring d ...
- Apache POI(Word)教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 IT宝库整理的Apache POI Word入门教程 - 从基本到高级概念的简单简单步骤学习Apache POI Word,其中包括概述,Apache POI安装,核心类,文档,段落,边框, ...
- 微服务网关:SpringCloud Gateway保姆级入门教程
什么是微服务网关 SpringCloud Gateway是Spring全家桶中一个比较新的项目,Spring社区是这么介绍它的: 该项目借助Spring WebFlux的能力,打造了一个API网关.旨 ...
- 什么是微服务网关?SpringCloud Gateway保姆级入门教程
什么是微服务网关 SpringCloud Gateway是Spring全家桶中一个比较新的项目,Spring社区是这么介绍它的: 该项目借助Spring WebFlux的能力,打造了一个API网关.旨 ...
最新文章
- 基于psr规范php框架,PHP-PSR规范
- 机器学习的数学基础(1)--Dirichlet分布
- shell sqlplus执行sql文_各主流数据库非交互执行
- DevC++如何安装自定义头文件并使用
- CSDN 十大技术主题盘点-云原生篇
- Pycharm回车之后不能换行或不能缩进的解决方法
- latex安装包_Latex安装包及模版教程!数学专业必备!美赛神器!
- 数据流重导向 -- 第11章 认识与学习 BASH
- 微软官方的.net系列文档
- u盘魔术师装linux,小白也能学会的U盘魔术师重装系统教程
- win7系统 winload.efi 文件损坏 报 0xc0000428 错误 不重装系统解决方法
- 为什么我的世界服务器显示红叉,我的世界藏宝图怎么看红叉
- 南阳师范计算机与信息技术学院,刘军(计算机与信息技术学院)老师 - 南阳师范学院 - 院校大全...
- typecho插件,typechoSEO插件,typecho程序插件
- 常见软件架构风格介绍
- 【office】无法卸载office?
- 【爬虫学习笔记day44】5.2. (scrapy案例二)阳光热线问政平台爬虫
- WPF学习之绘图和动画--DarrenF
- Java的Modifier
- 管理好你的20~30岁
热门文章
- EaseUS Todo Backup for Mac(mac数据备份软件)
- QQ游戏怎么引流?如何利用QQ游戏引流让别人加你?
- 设计一台嵌入式CISC模型机
- linux查询当前主机的IP地址,根据ip地址查询其他主机名(Linux)
- CANOpen系列教程01_初识CAN与CANOpen及相关内容
- IEDA如何设置背景图片
- c语言定义不定长数组初始化_C语言如何定义一组长度不定的数组?
- 广电“科技少年”科普大赛在广州紫泥堂基地圆满闭幕
- 华为云MVP马超:云原生时代开发者的挑战与出路
- 卤味店,如何在低线城市挣钱