专栏首页java一日一条HttpInvoker运作原理

HttpInvoker运作原理

把第三方系统的方法搬到本地

HttpInvoker是常用的Java同构系统之间方法调用实现方案,是众多Spring项目中的一个子项目。顾名思义,它通过HTTP通信即可实现两个Java系统之间的远程方法调用,使得系统之间的通信如同调用本地方法一般。

HttpInvoker和RMI同样使用JDK自带的序列化方式,但是HttpInvoker采用HTTP方式通信,这更容易配合防火墙、网闸的工作。

服务端实现

服务端主入口由HttpInvokerServiceExporter实现,它的工作大致流程如下

HttpInvokerServiceExporter实现了HttpRequestHandler,这使得其拥有处理HTTP请求的能力,按照Spring MVC的架构,它将被注册到HandlerMappingBeanNameMapping中,这设计到Spring MVC如何处理请求,可以关注我的相关文章。 服务端的重要任务就是读取并解析RemoteInvocation,再返回RemoteInvocationResult,剩下的都只是标准IO流的读写。

客户端实现

客户端的实现也很好理解,主入口为HttpInvokerProxyFactoryBean, 和Spring用到的众多设计相同,该类的结构使用了模板设计方法,该类提供实现了几个模板方法,整体逻辑由父类HttpInvokerClientInterceptor的实现,主要流程如下

我们最关心的是当我们调用接口的方法时,HttpInvoker是如何做到调用到远方系统的方法的,其实HttpInvokerProxyFactoryBean最后返回的是一个代理类(Cglib Proxy或者Jdk Proxy),我们调用接口的任何方法时,都会先执行HttpInvokerClientInterceptorinvoke()方法。

小结

HttpInvoker的实现就像学TCP编程时的“时间服务器”一样,是个经典且容易理解的HTTP通信编程范例,结合Java的序列化和简单的封装,让程序员可以像调用本地方法一样调用第三方服务器的方法,非常方便。

本文分享自微信公众号 - java一日一条(mjx_java)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java中创建对象的5种方式

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象。然而这里有很多创建对象的方法,我们会在这篇文章中学到。

    哲洛不闹
  • 哪些因素影响Java调用的性能?

    这得从一个小故事说起。我在一个Java核心库的邮件列表中提交了一个修改 ——重写了一些本是 final 的方法。一石激起千层浪,这一改动引发了几番讨论。而其中一...

    哲洛不闹
  • Java IAQ:很少被回答的问题

    一个问题如果被回答地很少,有可能是因为知道答案的人很少,亦或是因为问题本身模糊不清、微不足道(但对你来讲可能很关键)。我似乎发明了一个术语,但是它在一个信息量很...

    哲洛不闹
  • 跟我学Kafka之Controller控制器详解(一)

    Kafka集群中的其中一个Broker会被选举为Controller,主要负责Partition管理和副本状态管理,也会执行类似于重分配Partition之类的...

    小程故事多
  • 使用 Moq 测试.NET Core 应用 -- Mock 行为

    第一篇文章, 关于Mock的概念介绍:https://cloud.tencent.com/developer/article/1172536

    solenovex
  • 注解 @Deprecated、@deprecated 的使用、说明

    版权声明:这可是本菇凉辛辛苦苦原创的,转载请一定带上我家地址,不要忘记了哈 . https://b...

    微风-- 轻许--
  • 从mysql获取到从redis获取 示例

    1.因采集是每分钟写入一次数据库,故redis每分钟读取一次数据库最新信息,读取脚本如下:

    葫芦
  • CSAPP之计算机系统漫游

    什么是计算机系统?计算机系统是由硬件和系统软件组成的,它们共同工作来运行应用程序。如下一个hello程序:

    HeaiKun
  • HOG特征可视化

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    chaibubble
  • Java回调机制解读

    在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种:

    Java团长

扫码关注云+社区

领取腾讯云代金券