蓝盟弱电工程,Dubbo中Http协议的详细说明

发布者:上海IT外包 发布时间:2019/10/11 10:24:29来源:www.linemore.com

     说到与Dubbo框架兼容的协议,您的第一个反应是什么?默认情况下,可能会有Dubbo支持的dubbo协议,以及Dangbo为Dubbo贡献的旧的其余协议,或今天的主角http。
  太阳是红色的,花是五颜六色的,读者和朋友们很好,现在是时候分享达博的知识了。说到与Dubbo框架兼容的协议,您的第一个反应是什么?默认情况下,可能会有Dubbo支持的dubbo协议,以及Dangbo为Dubbo贡献的旧的其余协议,或今天的主角http。到目前为止,Dubbo的最新版本已发展到2.7.3,并且已兼容:dubbo,hessain,http,injvm,jsonrpc,memcached,native-thrift,thrift,redis,rest,rmi,webservice,xml,等使用方法尚未在官方文档中完成。事实证明,达博(Dubbo)接受了很多协议。有点意外吗?
  使用如此众多的RPC协议,有些人可能会遇到以下问题:休息,jsonrpc,Web服务不依赖于HTTP通信吗?为什么会有单独的http协议?它并没有着急回答这个问题,而是将我们带入了今天的话题,在Dubbo框架中引入了所谓的http协议。
  Dubbo中的http协议
  在Dubbo中,使用http协议与其他协议基本相同,只需指定该协议即可。
  服务器属性的可选值:jetty,tomcat,servlet。
  配置完成后,当服务使用者发起对服务提供商的呼叫时,底层将使用标准http协议进行通信。可以在https://github.com/apache/dubbo-samples直接找到一个官方示例,其中的子模块dubbo-samples-http创建一个http协议调用的示例。
  为避免误解,我们声明:在本文中,所有http协议都专门指dubbo中的http协议,而不是每个人都熟悉的通用http协议。
  http协议的基本原理
  从默认的dubbo协议更改为http协议是一件非常简单的事情。以上是从用户角度看的所有内容。接下来,我们将探讨基本的实现原理。通过查看Dubbo的源代码,找到HttpProtocol的实现,您可能会感到惊讶,基本上信任HttpProtocol的一个类,实现HTTP协议
  Dubbo中http协议的详细说明
  要了解自定义dubbo协议的实现,大约有30个类! http协议的实现是如此简单,其背后有两个主要原因:
  远程层使用http通信,不需要自定义编解码器。
  引用和导出逻辑由Spring提供的HttpInvoker封装。
  Spring提供的神圣的HttpInvoker是什么?实际上,这是一个相对不常见的概念,但并不复杂。简而言之,它是使用Java序列化将对象转换为字节并通过http发送它们。在服务器端,Spring可以Map url,在容器中找到相应的bean反射调用过程,无论您是否还没有看到它,都可以通过以下示例快速理解该概念。
  春季HttpInvoker
  该部分可以在Spring文档中找到:https://docs.spring.io/spring/docs/4.3.24.RELEASE/spring-framework-reference/htmlsingle/#remoting-httpinvoker-server
  以下示例显示了如何使用本机Spring HttpInvoker实现远程调用。
  创建服务提供商
  Public AccountServiceImpl类实现AccountService {
  @Override
  公共帐户findById(int id){
  帐户account=新帐户(id,新日期()。ToString());
  退货账户;
  }
  }
  @豆
  AccountService accountService(){
  返回新帐户ServiceImpl();
  }
  @Bean('/AccountService')
  public HttpInvokerServiceExporter accountServiceExporter(AccountService accountService){ 
  HttpInvokerServiceExporter exporter=新的HttpInvokerServiceExporter();
  exporter.setService(accountService);
  exporter.setServiceInterface(AccountService.class);
  退货出口商;
  }
  公开服务的代码非常简单,需要注意两点:
  org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter是由Spring封装的服务展示者,它使用serviceInterface作为公共接口来为服务外实现类提供服务。
  @Bean('/AccountService')不仅指定IOC容器中Bean的名称,而且还充当路由映射。如果本地服务器在端口8080上公开,则示例服务的路径为http://localhost:8080/AccountService。
  创建服务使用者
  @配置
  公共类HttpProxyConfig {
  @Bean('accountServiceProxy')
  公用HttpInvokerProxyFactoryBean accountServiceProxy(){
  HttpInvokerProxyFactoryBean accountService=新的HttpInvokerProxyFactoryBean();
  accountService.setServiceInterface(AccountService.class);
  accountService.setServiceUrl('http://localhost:8080/AccountService');
  退货服务;
  }
  }
  @SpringBootApplication
  公共类HttpClientApp {
  公共静态void main(String [] args){<html>
  <head><title>502 Bad Gateway</title></head>
  <body bgcolor="white">
  <center><h1>502 Bad Gateway</h1></center>
  <hr><center>nginx</center>
  </body>
  </html>

 

上海IT外包服务网 链接:http://www.linemore.com

>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部