zoukankan      html  css  js  c++  java
  • dubbo-RPC学习(二) http protocol

    dubbo中的协议默认支持很多种,从简单的开始,先解读HttpProtocol吧。

    dubbo中的http-RPC基于spring web支持的http invoker,web容器默认使用jetty。

    因为调用不是基于dubbo协议,在这里,存在一个抽象代理AbstractProxyProtocol,像http、RMI、webservice、hessian等等协议都继承自该代理类。该代理主要负责在发布服务的时候将服务代理发布出去,在引用服务的时候,转换为dubbo内部的执行体invoker。

    在HttpProtocol中,有一个关键的内部类InternalHandler,该类用于将http请求接入http invoker中,而且,默认只支持POST的http请求。

    先简单说说spring的http invoker。

    Spring HTTP Invoker是spring框架中的一个远程调用模型,执行基于HTTP的远程调用,也就是说,可以通过防火墙,并使用java的序列化机制在网络间传递对象。客户端可以很轻松的像调用本地对象一样调用远程服务器上的对象,要注意的一点是,服务端、客户端都是使用Spring框架。

    客户端

    1. 向服务器发送远程调用请求
      远程调用信息-->封装为远程调用对象-->序列化写入到远程调用http请求中-->向服务器端发送
    2. 接收服务器端返回的远程调用结果
      服务器端返回的远程调用结果HTTP响应——>反序列化为远程调用结果对象

    服务端

    1. 接收客户端发送的远程调用请求
      客户端发送的远程调用HTTP请求——>反序列化为远程调用对象——>调用服务器端目标对象的目标方法处理
    2. 向客户端返回远程调用结果
      服务器端目标对象方法的处理结果——>序列化写入远程调用结果HTTP响应中——>返回给客户端。

    在dubbo中,是采用API的形式使用HTTP invoker的,针对HTTP invoker,还可以通过spring的xml进行配置来进行操作。在这里就不细说了。

  • 相关阅读:
    eclipse导出maven java project为jar包,包含第三方依赖jar包以及普通Java Project 导出包含第三方
    Joda-Time 工具类的使用
    spring-boot 分布式定时任务锁shedlock
    [DB][MyBatis]利用mybatis-paginator实现分页(目前看到MyBatis下最好的分页实现)
    KafKa脚本
    Es重建索引
    Canal1.1.4同步数据至Es时间格式问题
    CDH5.12.1添加Phoenix4.14
    CDH5.12.1利用Sqoop将mysql数据导入hive
    CDH5.12.1将Spark1.6升级到Spark2.2
  • 原文地址:https://www.cnblogs.com/asfeixue/p/3689250.html
Copyright © 2011-2022 走看看