不同服务调用方式的比较

1.同步服务调用

上图是同步调用的原理图,用户线程在完成消息序列化之后,把消息投递到通信框架,然后同步阻塞,等待通信线程发送

请求并接收到应答之后,唤醒用户同步阻塞的线程,用户线程获取到应答后返回。

2.异步服务调用

异步调用是基于JDK的Future机制,Future代表了异步操作的结果,用户可以通过调用它的get方法获取结果。

原理如图所示。

1.消费者调用服务端发布接口,接口调用由服务框架封装成动态代理,发起远程服务调用。

2.通信框架异步发送消息,如果没有发生I/O异常,返回。

3.消息发送成功,I/O线程构造Future对象,设置到RPC上下文中。

4.用户线程通过RPC上下文获取Future对象。

5.构造Listener对象,将其添加到Future中,用于应答服务端异步回调通知。

6.用户线程返回,不阻塞等待应答。

7.服务端返回应答消息,通信框架反序列化等。

8.I/O将应答设置到Future对象的操作结果中。

9.Future对象扫描注册监听器列表,将结果通知给监听器,监听器获取到结果之后,继续后续业务逻辑的执行。异步调用结束。

时间: 2024-10-09 18:36:40

不同服务调用方式的比较的相关文章

WCF系列之WCF服务调用方式

WCF服务调用通过两种常用的方式:一种是借助代码生成工具SvcUtil.exe或者添加服务引用的方式,一种是通过ChannelFactory直接创建服务代理对象进行服务调用. 通过SvcUtil.exe的方式调用服务 SvcUtil.exe是一个命令行工具,位于:C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin目录下,可以将SvcUtil.exe添加到VS2010中方便以后的运用,添加方式:在VS2010的Tools菜单中选择External T

Wcf:可配置的服务调用方式

添加wcf服务引用时,vs.net本来就会帮我们在app.config/web.config里生成各种配置,这没啥好研究的,但本文谈到的配置并不是这个.先看下面的图: 通常,如果采用.NET的WCF技术来架构SOA风格的应用,我们会把项目做一些基本的分层,如上图: 01. contract层:通常定义服务的接口(即服务契约ServiceContract,指明该服务提供了哪些方法可供外部调用).以及接口方法中传输的Model定义(即:数据契约DataContract,指明方法中的对象参数的Clas

Spring Cloud Ribbon---微服务调用和客户端负载均衡

前面分析了Eureka的使用,作为服务注册中心,Eureka 分为 Server 端和 Client 端,Client 端作为服务的提供者,将自己注册到 Server 端,Client端高可用的方式是使用多机部署然后注册到Server,Server端为了保证服务的高可用,也可以使用多机部署的方式.前面简单搭建了Eureka Client 和 Server,然后将Client成功注册到 Server,本节我们将来看看如何调用Eureka服务,在多机部署情况下如何保证负载均衡.Spring Clou

异步服务之间的调用方式

本文为原作,转载请发自原文出处 http://www.cnblogs.com/jermmy/p/6752950.html,谢谢合作! 对与异步服务之间的调用方式LZ只使用了future和callback两种方式,其实异步服务之间的调用有以下几种 1.oneway oneway 是一种只管发送而不管结果的交互方式,不关心服务方的请求结果如何,属于一种单向的通知 2.future 多线程获取数据以及异步交互获取数据使用callable和future的组合是多服务中经常用到的,该接口在juc包中,ca

绑定服务调用远程服务中的方法

在Andorid平台中,各个组件运行在自己的进程中,他们之间是不能相互访问的,但是在程序之间是不可避免的要传递一些对象,在进程之间相互通信.为了实现进程之间的相互通信,Andorid采用了一种轻量级的实现方式RPC(Remote Procedure Call 远程进程调用)来完成进程之间的通信,并且Android通过接口定义语言(Andorid Interface Definition Language ,AIDL)来生成两个进程之间相互访问的代码,例如,你在Activity里的代码需要访问Se

远程调用方式概述

在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI.MINA.ESB. Burlap.Hessian.SOAP.EJB和JMS 等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那 深入了解这些技术背后的机制就是必须的了,本文中我们将来一探究竟,抛砖引玉,欢迎大家提供更多的实现远程通讯的技术和原理的介绍. 基本原理 要实现网络机器间的通讯

WebService与RMI(远程调用方式实现系统间通信)

前言 本文是<分布式java应用基础与实践>读书笔记:另外参考了此博客,感觉讲的挺好的,尤其是其中如下内容: 另外,消息方式实现系统间通信本文不涉及.RMI则只采用spring RMI框架来实现效果,更多的则是来讲讲webService及效果. RMI(Remote Method Invocation) ----> spring RMI(配置及实现直接参考spring文档,已经很详细了) spring RMI工作原理图如下: RMI代码结构图: 服务端代码 接口Business.java

Saltstack的API接口与调用方式

saltstack看起来是成为一个大规模自己主动化运维和云计算管理的一个框架,类似于SDK,并非像puppet仅仅成为一个工具.基于良好设计的API和清楚的思路,让salt的二次开发变得非常easy.写非常少的代码就能够将salt跟现有的运维系统结合.saltstack是用python语言实现的,假设对saltstack本身进行二次开发,就必须得会python语言. Saltstack是通过多个独立的模块构成的,这些都能够当做saltstack的api.然后在上层做基础开发能够通过调用这些sal

java实现WebService 以及客户端不同的调用方式

java 实现WebService 以及不同的调用方式 webservice:    就是应用程序之间跨语言的调用    wwww.webxml.com.cn    1.xml    2.    wsdl: webservice description language web服务描述语言        通过xml格式说明调用的地址方法如何调用,可以看错webservice的说明书        3.soap simple object access protoacl (简单对象访问协议)