java dubbo jsf_cubelink

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 注册、发现

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

104704586.png

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

3.2 客户端架构

客户端的主要架构如下

104716684.png

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

3.3 服务端架构

服务端主要架构如下

104724436.png

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 参数回调

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

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

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

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

相关文章

python 的案例实战_python案例实战之一

分析思路:1、明确分析目标;2、导入库、导入数据;3、简单查看下数据行列、整体情况;4、数据清洗;5、确定维度和指标;6、分析并作图1、查看整体数据情况1.1引入使用的库import numpy as npimport pandas as p…

java数据结构期末复习_java数据结构复习02

1.递归问题1.1计算阶乘packageinterview.recursion;importjava.util.Scanner;public classFact {public static voidmain(String[] args) {System.out.println("请输入n的值:");Scanner in newScanner(System.in);int n in.nextInt();int num fact(n);Sys…

java中methods方法_java中Class.getMethod方法

Method Class.getMethod(String name, Class>... parameterTypes)的作用是获得对象所声明的公开方法该方法的第一个参数name是要获得方法的名字,第二个参数parameterTypes是按声明顺序标识该方法形参类型。person.getClass().getMethod("Speak", null)…

centos6 yum快速安装mysql_centos6.10 yum安装mysql 5.6-Go语言中文社区

一、检查系统是否安装其他版本的MYSQL数据#yum list installed | grep mysql#yum -y remove 文件名二、安装及配置# wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm# rpm -ivh mysql-community-release-el6-5.noarch.rpm# yum repolist all | grep mysq…

二叉树两节点距离java,求二叉树中两个节点的最远距离

问题定义如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。计算一个二叉树的最大距离有两个情况:情况A: 路径经过左子树的最深节…

php cli 编程,php-cli下编程如何分层架构、面向对象、统一入口文件?

以往写cli下运行的业务或者测试代码,总是新建文件,面向过程编写代码。几次之后,cli目录下好多文件,即便勉强在一个cli测试文件中写了一个类,也是让其中的一个方法自启动,要测试别的方法,总是要修…

php中gd为什么是乱码的,php gd库中文乱码怎么解决?

php gd库中文乱码怎么解决?,中文,乱码,字符,选项,字体php gd库中文乱码怎么解决?易采站长站,站长之家为您整理了php gd库中文乱码怎么解决?的相关内容。解决方法:1、网站整站使用UTF8编码,如果已使用GB2312…

php实现飘窗,JS实现网站图片飘窗效果,JavaScript悬浮广告(附详细代码)

原标题:JS实现网站图片飘窗效果,JavaScript悬浮广告(附详细代码)JS实现网站图片飘窗效果,Java悬浮广告,郑州SEO提供以下代码,仅供参考:飘窗效果-丁光辉博客(www.dingguanghui.com)*{margin:0px;padding:0px…

oracle中orand使用,Postgres兼容Oracle研究——orafce调研

一、背景PostgreSQL是和Oracle最接近的企业数据库,包括数据类型,功能,架构和语法等几个方面。甚至大多数的日常应用的性能也不会输给Oracle。但是Oracle有些函数或者包,默认PostgreSQL是没有的,需要安装orafce包来实现…

labview linux 内核 不匹配,Linux CentOS7(或Ubuntu)中安装NI-VISA后一打开范例Simple Serial.vi就闪退,LabVIEW就崩溃。...

Linux CentOS7(或Ubuntu)中安装NI-VISA后一打开范例Simple Serial.vi就闪退,LabVIEW就崩溃。我安装了LabVIEW pro 2017 for Linux(另外也试了2016版的都是一样的效果),VISA也试了4.1.0、4.4.0、5.1.1、15.0.0、15.5.0、16.0.0、17.0.0版本都试过了&#…

kali linux子远程桌面,适用于kali linux的远程桌面开启方法(从windows xp 远程登录到kali linux )...

为了解决Windows远程桌面访问Ubuntu 12.04 之一 中提到的VNC远程桌面的缺点(见http://www.linuxidc.com/Linux/2012-07/64801.htm),我们采用第二种方法XRDP,该方法支持多用户登录并远程桌面。1、首先参考Windows远程桌面访问Ubuntu 12.04 之安装VNC中提到…

linux装redis环境变量,linux 怎样安装redis

人到中年有点甜获取Redis1、通过官网http://redis.io/获取稳定版源码包下载地址;2、通过wget http://download.redis.io/releases/redis-3.0.2.tar.gz下载 源码包;2编译安装Redis1、解压源码安装包,通过tar -xvf redis-3.0.2.tar.gz解压源码&…

word2016能识别linux换行符,word文章中的换行符如何批量替换为回车符

word文件中有换行符很正常,但是想要将换行符全部替换为回车符,该怎么替换?以下是学习啦小编为您带来的关于word文章中的换行符批量替换为回车符,希望对您有所帮助。word文章中的换行符批量替换为回车符1、在打开的word中,依次点击…

linux禁用防火墙配置,CentOS Linux防火墙配置及关闭

最近在CentOS Linux下安装配置 Oracle 数据库的时候,总显示因为网络端口而导致的EM安装失败,遂打算先关闭一下防火墙。偶然看到防火墙的配置操作说明,感觉不错。执行”setup”命令启动文字模式配置实用程序,在”选择一种工具”中选择”防火墙…

C语言CASE语句嵌套,C语言中switch case语句的嵌套

给一个含有嵌套的switch case的一段完整代码:#include int main(){int n1;int m2;switch(n){case 1:m;case 2:n;case 3:switch(n){case 1:n;case 2:m;n;break;}case 4:m;break;default:break;}printf("%d %d",m,n);return 0;}代码看起来很简单&#xff0c…

linux dd 进度条,Progress 进度条 – DDProgressHUD

DDProgressHUDProgress 进度条,UIActivityIndicatorView 小菊花,弹窗,状态显示,高度自定义DDProgressHUD的介绍提供了四种类型的展示:显示无限旋转的加载图(比如小菊花,可以自定义),显示文字信息…

Android动态图标包制作教程,安卓手机ico图标制作美化图文教程

如何让手机更加与众不同?今天我们就来学习如何利用出色的ico图标制作软件——Axialis IconWorkshop制作出美化手机屏幕的个性图标!如今,每个人都有属于自己的手机,每天使用手机聊QQ、刷微博、玩游戏,可以说手机已经是很多人生活中不可缺少的…

android progressbar 水平动画,Android ProgressBar 自定义样式(三),动画模式

果:和之前的一样,在布局文件中:android:id"id/progressBar3"android:layout_width"wrap_content"android:layout_height"wrap_content"android:indeterminate"false"android:indeterminateDrawable&…

android gridview行分割线,Android使用GridView实现表格分割线效果

使用gridview实现表格分割线效果,网格布局表格布局也是可以实现的。效果如下:1.主函数代码:package com.example.qd.douyinwu;import android.app.activity;import android.content.context;import android.os.bundle;import android.support…

android hook 实例,代码实例分析android中inline hook

以下内容通过1、实现目标注入程序,2、实现主程序,3、实现注入函数,4、thumb指令集实现等4个方面详细分析了android中inline hook的用法,以下是全部内容:最近终于沉下心来对着书把hook跟注入方面的代码敲了一遍&#xf…