cubelink概要设计

[TOC]

1. 撰写记录

更新时间

内容

作者

2017-08-23 08:39:31

撰写参数回调章节内容

林斌

2017-08-22 21:26:52

增加了异步响应和异步回调章节

林斌

2017-08-22 14:36:36

确定文档结构和大致框架

林斌

2. 设计目标

设计一个具备治理,监控,服务发现能力的RPC框架

框架支持同步、异步调用;支持回调

3. 架构设计

3.1 注册、发现

大体上来说是依靠注册中心实现注册和发现机制。架构如下

链接均采用长连接方式。注册中心会监控服务端的健康状态。并且在发生变化时,实时推送实例状态到客户端。

3.2 客户端架构

客户端的主要架构如下

TCP的双工特点使得实际上客户端的消息写出和消息收取可以并行。但是由于大多数RPC调用是同步的,因为需要一个同步/异步转换层在中间,满足接口调用的特性。

3.3 服务端架构

服务端主要架构如下

4. 技术要点

4.1 服务端注册服务方式

从服务端的实现角度来说,

4.1 接口定位

服务端可以在一个监听端口上暴露多个接口服务。那么调用的时候首先需要明确的就是调用的哪一个接口。

4.2 方法定位

客户端使用接口调用,如何在服务端这一侧定位对应的调用方法。为了节省传输数据,客户端和服务端可以通过一种方式约定每一个方法的数字序号。这样只需要传递数字序号即可定位调用的方法。

排序方式的方式为方法的字符串签名进行字母自然排序。序号从0开始递增。

4.3 多线程共享TCP通道

多个线程如果需要共享TCP通道,那么就需要通过请求序号的方式来区别不同的线程收到的响应。具体做法如下

客户端发出请求的报文中携带一个客户端全局唯一的序号。

服务端处理完业务请求后将响应和序号一起发回

客户端依靠响应中的序号将响应给予对应的等待线程(如果有的话)。

4.4 异步响应

底层的传输层框架本身就是支持异步的客户端。因此异步响应的支持本身实际上只需要在底层客户端的基础之上,引入一个异步响应的future实现类即可。

异步响应本身不需要修改API,可以只是在客户端配置该方法为异步响应。此时通过上下文之类的方式获得一个响应的future。调用方式类似

// 此调用会立即返回null

fooService.findFoo(fooId);

// 拿到调用的Future引用,当结果返回后,会被通知和设置到此Future。

Future fooFuture = RpcContext.getContext().getFuture();

4.4 参数回调

参数回调的效果是让客户端传递了一个调用行为到服务端。而这个调用行为的效果是发生在客户端本地的,所使用到的资源也在客户端本地。比较容易实现而且也实践较多的做法是定义一个只有一个方法且该方法没有返回值的接口。

接着的问题就是如何传递这个接口的实现。上面说到这个回调行为是发生在客户端本地的,因此传递一个接口的对象实现到服务端是没有意义的。因此只需要传递一个代表这个回调接口的标识过去即可。

java dubbo jsf_cubelink相关推荐

  1. java dubbo协议_Dubbo同时支持多种协议(以dubbo和rest为例)

    一. 背景知识 有时候微服务需要提供给多个消费者, 而不通过的消费者可能希望依据自身情况使用不同的协议. 另一方面, 有时候如果原本服务以 dubbo 协议提供服务, 但是为了调试或者监控方便, 我们 ...

  2. java dubbo服务导出excel数据量过大解决方案

    场景 公司项目有个以前的程序猿写的订单导出excel功能,后台管理界面先查询要导出的数据,然后点击导出按钮进行导出,原来的实现就是界面吧查询条件传到admim模块,admin通过dubbo远程调用or ...

  3. java dubbo协议_dubbo协议端口

    dubbo框架一共支持9种协议.其中,默认的,也是最常用的,那就是dubbo协议. 既然是协议,那么,就需要有端口. 所以,在使用dubbo协议暴露服务时,需要配置dubbo端口. dubbo协议的默 ...

  4. Java - Dubbo实战(一)快速入门 小白教程

    Dubbo是什么? Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封 ...

  5. RHEL环境搭建--Nginx|Tomcat|Java|Dubbo|RabbitMQ|Redis|Nexus|MySQL

    安装RHEL虚拟机 虚拟机软件:在本篇文章中,我是使用Vmware Workstation 9安装的虚拟机,其他常用的虚拟机软件还有Xen.KVM.VirtualBox等. ISO文件:rhel-se ...

  6. java dubbo 连接 zk 报错 Session 0x0 for server 127.0.0.1/<unresolved>:2181, unexpected error, closing so

    可能的解决方式 配置正常,zk 启动正常,但是就是连接不上 看下是否是你的项目使用 JDK 版本过高 我这里使用的是 17 ,调成 1.8 版本即可 问题概述 provider 配置如下 <be ...

  7. java dubbo 方案,Missing artifact com.alibaba:dubbo:jar:2.8.4 dubbo解决方案

    由于maven中心仓库中没有dubbo2.8.4,所以需要到github中下载源码包自己编译. 下载解压后,进入解压目录执行命令:mvn install -Dmaven.test.skip=true ...

  8. java dubbo swagger_Dubbo 的 Swagger 服务文档 swagger-dubbo

    软件介绍 swagger-dubbo支持dubbo以swagger方式展示文档和rest风格的HTTP模拟测试,主要应用场景有以下几点:通过dubbo与swagger的集成,提供接口文档的阅读 开发人 ...

  9. 基于Java+Dubbo设计的智能公交查询系统

    一.项目背景 随着经济的飞速发展,人们的生活质量有了较大的提高,城市居民的出行变得越来越频繁,城市交通也面临越来越多的挑战.城市公共交通具有客流量大.成本低.效率高.节约资源等优势,因此,如何大力发展 ...

最新文章

  1. 关于JVM,你需要掌握这些!!
  2. 6.MATLAB变量——矩阵操作一
  3. 如何应对多GPU大规模训练的挑战?
  4. js function如何传入参数未字符串_JavaScript 学习之路- JS 小测验
  5. android滚动条布局横向,Android自定义ViewGroup实现可滚动的横向布局(2)
  6. 《20天吃透Pytorch》Pytorch自动微分机制学习
  7. Android用户界面
  8. _stdcall与_cdecl的区别
  9. 使用SVN的导出功能,( 目的 : 使导出的文件目录中,不带有svn相关的文件 )
  10. C++ 优先级队列(priority_queue)
  11. 多臂老虎机导论(二)Stochastic Bandits
  12. 网络设备中的路由器的作用,如何设置路由器,上网、IP分配、黑白名单、访问量...
  13. 【Cocos2d游戏开发之八】开启高清(960*640)模式问题与解答、图片适配以及设置iphone横竖屏...
  14. python 自动打开登陆应用编码_Python+tkinter模拟“记住我”自动登录实例代码
  15. avx2指令集对php有用吗,AVX2指令集:AVX指令集的加强版
  16. GDC2013 Horizon and Beyond A Look into Tomb Raider's Tools
  17. WMT 2022国际机器翻译大赛发榜,微信翻译斩获三项任务冠军
  18. git-cz 规范提交代码注释
  19. 最后1天|宏基因组分析第8期(报名直播课免费参加线下2020.7)
  20. 电子商务时代网络营销

热门文章

  1. Windows平台如何查看一个dll依赖的其他dll
  2. js保存当前html,JavaScript保存当前页面
  3. Java数据库篇1——数据库配置
  4. linux vi 出现下划线,Vim高亮当前行(显示为下划线)的解决方案
  5. 淮北市成人学计算机学校,安徽淮北市成人学电脑?
  6. java 字符流 utf8,JAVA基础(字符流设置编码读写字符)
  7. java搭建聊天服务器_使用 ServerSocket 建立聊天服务器-2
  8. java高级教程_Java高级教程02
  9. 三相四线怎样查漏电_老电工支招!漏电保护器的接线方法
  10. Jackson高级操作————节点树