国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

一文詳細解讀 Dubbo 中的 Http 協議

網絡 網絡管理
說到 Dubbo 框架支持的協議,你的第一反應是什么?大概會有 Dubbo 默認支持的 dubbo 協議,以及老生常談的由當當貢獻給 Dubbo 的 rest 協議,或者是今天的主角 http。

太陽紅彤彤,花兒五顏六色,各位讀者朋友好,又來到了分享 Dubbo 知識點的時候了。說到 Dubbo 框架支持的協議,你的第一反應是什么?大概會有 Dubbo 默認支持的 dubbo 協議,以及老生常談的由當當貢獻給 Dubbo 的 rest 協議,或者是今天的主角 http。截止到目前,Dubbo 最新版本演進到了 2.7.3,已經支持了:dubbo,hessain,http,injvm,jsonrpc,memcached,native-thrift,thrift,redis,rest,rmi,webservice,xml 等協議,有些協議的使用方式還沒有補全到官方文檔中。原來 Dubbo 支持這么多協議,是不是有點出乎你的意料呢?

[[278760]]

 

這么多 RPC 協議,可能有人會產生如下的疑問:rest,jsonrpc,webservice 不都是依靠 http 通信嗎?為什么還單獨有一個 http 協議?先不急著回答這個問題,而是引出今天的話題,先來介紹下 Dubbo 框架中所謂的 http 協議。

Dubbo 中的 http 協議

在 Dubbo 使用 http 協議和其他協議基本一樣,只需要指定 protocol 即可。

  1. <dubbo:protocol name="http" port="8080" server="jetty" /> 

server 屬性可選值: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 協議實現的如此簡單,背后主要原因有兩點:

  • remoting 層使用 http 通信,不需要自定義編解碼
  • 借助了 Spring 提供的 HttpInvoker 封裝了 refer 和 exporter 的邏輯

Spring 提供的 HttpInvoker 是何方神圣呢?的確是一個比較生僻的概念,但并不復雜,簡單來說,就是使用 Java 序列化將對象轉換成字節,通過 http 發送出去,在 server 端,Spring 能根據 Url 映射,找到容器中對應的 Bean 反射調用的過程,沒見識過它也不要緊,可以通過下面的示例快速掌握這一概念。

 

Spring HttpInvoker

本節內容可參見 Spring 文檔:https://docs.spring.io/spring/docs/4.3.24.RELEASE/spring-framework-reference/htmlsingle/#remoting-httpinvoker-server

下面的示例將會展示如何使用 Spring 原生的 HttpInvoker 實現遠程調用。

創建服務提供者

  1. public class AccountServiceImpl implements AccountService { 
  2.  @Override 
  3.  public Account findById(int id) { 
  4.  Account account = new Account(id, new Date().toString()); 
  5.  return account; 
  6.  } 
  7. @Bean 
  8. AccountService accountService(){ 
  9.  return new AccountServiceImpl(); 
  10. @Bean("/AccountService"
  11. public HttpInvokerServiceExporter accountServiceExporter(AccountService accountService){ 
  12.  HttpInvokerServiceExporter exporter = new HttpInvokerServiceExporter(); 
  13.  exporter.setService(accountService); 
  14.  exporter.setServiceInterface(AccountService.class); 
  15.  return exporter; 

暴露服務的代碼相當簡單,需要注意兩點:

  1. org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter 是 Spring 封裝的一個服務暴露器,它會以 serviceInterface 為公共接口,以 service 為實現類向外提供服務。
  2. @Bean("/AccountService") 不僅僅指定了 IOC 容器中 bean 的名字,還充當了路徑映射的功能,如果本地服務器暴露在 8080 端口,則示例服務的訪問路徑為http://localhost:8080/AccountService

創建服務消費者

  1. @Configuration 
  2. public class HttpProxyConfig { 
  3.  @Bean("accountServiceProxy"
  4.  public HttpInvokerProxyFactoryBean accountServiceProxy(){ 
  5.  HttpInvokerProxyFactoryBean accountService = new HttpInvokerProxyFactoryBean(); 
  6.  accountService.setServiceInterface(AccountService.class); 
  7.  accountService.setServiceUrl("http://localhost:8080/AccountService"); 
  8.  return accountService; 
  9.  } 
  10. @SpringBootApplication 
  11. public class HttpClientApp { 
  12.  public static void main(String[] args) { 
  13.  ConfigurableApplicationContext applicationContext = SpringApplication.run(HttpClientApp.class, args); 
  14.  AccountService accountService = applicationContext.getBean(AccountService.class); 
  15.  System.out.println(accountService.findById(10086)); 
  16.  } 

消費者端引用服務同樣有兩個注意點:

  1. org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean 是 Spring 封裝的一個服務引用器,serviceInterface 指定了生成代理的接口,serviceUrl 指定了服務所在的地址,與之前配置的服務暴露者的路徑需要對應。
  2. HttpInvokerProxyFactoryBean 注冊到容器之中時,會同時生成一個 AccountService 接口的代理類,由 Spring 封裝遠程調用的邏輯。

調用細節分析

對于 Spring HttpInvoker 的底層實現,就沒必要深究了,但大家肯定還是會好奇一些細節:dubbo 中的 http 報文體是怎么組織的?如何序列化對象的?

我們使用 Wireshark 可以抓取到客戶端發送的請求以及服務端響應的報文。

 

一文詳細解讀 Dubbo 中的 http 協議

 

追蹤報文流,可以看到詳細的請求和響應內容

 

一文詳細解讀 Dubbo 中的 http 協議

 

從 ContentType:application/x-java-serialized-object 和報文 Body 部分的 ASCII 碼可以看出,使用的是 Java Serialize 序列化。我們將 Body 部分導出成文件,使用 Java Serialize 反序列化響應,來驗證一下它的廬山真面目:

 

一文詳細解讀 Dubbo 中的 http 協議

 

使用 Java Serialize 可以正常反序列化報文,得到結果是 Spring 內置的包裝類 RemoteInvocationResult,里面裝飾著實際的業務返回結果。

http 協議的意義

Dubbo 提供的眾多協議有各自適用的場景,例如

  • dubbo://,dubbo 協議是默認的協議,自定義二進制協議;單個長連接節省資源;基于 tcp,架構于 netty 之上,性能還算可以;協議設計上沒有足夠的前瞻性,不適合做 service-mesh 談不上多么優雅,但是好歹風風雨雨用了這么多年,周邊也有不少配套組件例如 dubbo2.js, dubbo-go, dubbo-cpp,一定程度解決了多語言的問題。
  • webservice://,hession://,thrift:// 等協議,基本是為了適配已有協議的服務端/客戶端,借助于 dubbo 框架的 api,可以使用其功能特性,意義不是特別大。
  • redis://,memcached:// 等協議,并非是暴露給用戶配置的協議,一般是 dubbo 自用,在注冊中心模塊中會使用到相應的擴展

所有協議的具體使用場景和其特性,我可能會單獨寫文章來分析,而如今我們要思考的是 Dubbo 提供 http 協議到底解決什么問題,什么場景下用戶會考慮使用 Dubbo 的 http 協議。

我個人認為 Dubbo 現如今的 http 協議比較雞肋,原生 http 通信的優勢在于其通用性,基本所有語言都有配套的 http 客戶端和服務端支持,但是 Dubbo 的 http 協議卻使用了 application/x-java-serialized-object 的格式來做為默認的 payload,使得其喪失了跨語言的優勢??赡苡凶x者會反駁:HttpInvoker 支持配置序列化格式,不能這么草率的詬病它。但其實我們所關注的恰恰是默認實現,正如 dubbo:// 協議也可以配置 fastjson 作為序列化方案,但是我們同樣不認為 dubbo:// 協議是一個優秀的跨語言方案,理由是一樣的。當然,評價一個應用層協議是否是優秀的,是否適合做 mesh 等等,需要多種方向去分析,這些我不在本文去分析。

說到底,本文花了一定的篇幅向大家介紹了 Dubbo 的 http 協議,到頭來卻是想告訴你:這是一個比較雞肋的協議,是不是有些失望呢?不要失望,dubbo 可能在 2.7.4 版本廢棄現有的 http 協議,轉而使用 jsonrpc 協議替代,其實也就是將 jsonrpc 協議換了個名字而已,而關于 jsonrpc 的細節,我將會在下一篇文章中介紹,屆時,我也會分析,為什么 jsonrpc 比現有的 http 協議更適合戴上 http 協議的帽子,至于現有的 http 協議,我更傾向于稱之為:spring-httpinvoker 協議。

 

總結

dubbo 現有 http 協議的意義是什么?如果你習慣于使用 Spring HttpInvoker,那或許現有的 http 協議還有一定的用處,但從 Dubbo 交流群和 Spring 文檔介紹其所花費的篇幅來看,它還是非常小眾的。同時也可以讓我們更好地認識協議發展的歷史,知道一個協議為什么存在,為什么會被淘汰。

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2019-11-25 11:04:22

Http協議Dubbo

2022-06-20 09:09:26

IDaaSIAM身份即服務

2021-05-07 09:17:21

HTTPTCP協議

2022-05-11 11:54:55

Http傳送協議

2021-09-02 10:24:54

JavaScript前端語言

2019-05-14 10:50:11

HTTP協議HttpServlet

2024-12-23 14:46:24

2021-09-09 10:26:26

Javascript 文檔對象前端

2022-02-25 07:34:36

MQTT協議RabbitMQ

2020-03-08 21:22:03

HTTP112

2021-10-11 10:19:48

Javascript 高階函數前端

2017-05-04 20:29:12

HTTP服務器TCP

2025-01-10 08:42:27

分布式服務發布Dubbo

2023-08-26 20:56:02

滑動窗口協議

2022-02-24 07:34:10

SSL協議加密

2022-05-16 10:49:28

網絡協議數據

2021-04-27 05:53:50

6G 衛星通信6G 通信產業

2022-08-29 07:31:48

HashMap線程擴容

2020-02-02 15:14:24

HTTP黑科技前端

2023-01-09 08:14:08

GoHttpServer
點贊
收藏

51CTO技術棧公眾號

风间由美性色一区二区三区| 无遮挡动作视频在线观看免费入口 | 高清欧美性猛交xxxx| www.超碰com| 日韩国产一区三区| 婷婷丁香久久| 亚洲欧美精品一区二区| 日本一道高清亚洲日美韩| 国产成人在线色| 午夜在线观看视频网站| 欧美日韩国产另类不卡| 日韩精品极品| 中文欧美在线视频| 日韩在线综合| 日本高清不卡的在线| 久久久久久久久久av| 国产 福利 在线| 久久国产剧场电影| 簧片在线免费看| 日韩精品视频中文在线观看| 1024在线看片你懂得| 日韩视频一区二区三区| 我爱我色成人网| 国产精品久久久久久久app| 亚洲色图 在线视频| 中文字幕精品一区久久久久| 日日夜夜精品| 精品久久久av| 最新精品国偷自产在线| 久久视频这里有精品| 日韩精品高清在线观看| 日本大胆欧美| 26uuu久久噜噜噜噜| 午夜不卡一区| 538国产精品一区二区在线| 久久精品亚洲欧美日韩精品中文字幕| 亚洲亚裔videos黑人hd| 亚洲欧美久久精品| 天天综合网天天做天天受| 久久天天狠狠| 国内精品视频666| 在线黄色免费观看| 亚洲乱码日产精品bd| 国产三级av在线| 中文字幕久久精品| a级片在线免费观看| 亚洲无限av看| 婷婷成人综合| 亚洲淫片在线视频| 美日韩一区二区| 黄色国产精品视频| 色综合视频一区二区三区日韩| 亚洲天堂第一页| 特黄特色欧美大片| 国产另类自拍| 久久理论电影网| 伊人75在线| 亚洲成人网在线| 日韩福利视频一区| 欧美一区二区三区在线免费观看| 26uuu色噜噜精品一区二区| 香蕉网站在线| 亚洲一品av免费观看| 日韩国产一区| 成人一区二区av| 亚洲一区二区三区自拍| 宅男在线观看免费高清网站| 欧美成人免费观看| 一区二区三区四区五区精品视频 | 国产精品久久久久久久午夜| 男女精品网站| av电影资源| 亚洲第一在线视频| 九九在线高清精品视频| 欧美二区三区| 亚洲男人电影天堂| 高清不卡亚洲| 国产精品亚洲综合| 自拍偷自拍亚洲精品播放| av手机免费在线观看| 国产欧美一区二区| 成人免费毛片嘿嘿连载视频| 男人影院在线观看| 日韩免费观看视频| 成人av午夜电影| 91精选在线| 国产精品视频在线观看| www.在线欧美| 免费看电影在线| 成人性生交大片免费看视频直播| 久久综合精品国产一区二区三区| 中文字幕在线播放网址| 成人精品视频99在线观看免费| 99re亚洲国产精品| 国产高潮在线| 国产三区精品| 亚洲国产欧美日韩另类综合 | 亚洲一级免费观看| 日韩大陆欧美高清视频区| 91欧美在线| 污污网站免费观看| 国产亚洲精品高潮| 老司机午夜免费精品视频| 波多野结衣av在线| 久久久久久综合网天天| 粉嫩嫩av羞羞动漫久久久 | 精品福利一区| 国产女主播自拍| 亚洲变态欧美另类捆绑| 狠狠入ady亚洲精品经典电影| 日本免费高清视频| 久久久免费精品| 久久综合久久综合九色| 亚洲承认视频| 日韩精品欧美专区| 色悠久久久久综合欧美99| 亚洲精品亚洲人成在线观看| 99精品人妻少妇一区二区| 亚洲国产精品专区久久| 亚洲永久网站| 拍真实国产伦偷精品| 高清视频一区| 欧美午夜免费电影| 欧美午夜不卡| 9191在线| 精品视频一区二区三区四区| 欧美无人高清视频在线观看| 国产精品啊啊啊| 成人午夜影视| 麻豆91av| 亚洲电影免费观看高清| 麻豆精品一区二区综合av| a级片免费在线观看| 亚洲国产午夜伦理片大全在线观看网站 | 欧美性猛交p30| 国产精品一区二区电影| 亚洲人成人一区二区在线观看 | 精品视频在线观看日韩| 麻豆一区二区在线| 久久青青视频| 国产精品日韩三级| 最新亚洲国产精品| 99久久精品免费看国产| 亚洲不卡视频| 视频免费裸体网站| 91九色单男在线观看| 色先锋久久av资源部| 久久精品道一区二区三区| 密臀av在线播放| 色欲av无码一区二区人妻| 欧美国产视频一区二区| 亚洲激情在线播放| 亚洲三级视频| 成人日韩精品| 国产小黄视频| av色综合网| 日韩欧美你懂的| 国产成人小视频| 欧美美女黄色| 亚洲搞黄视频| 日本香蕉视频在线观看| 久久久免费观看| 欧美日韩中字一区| 国产不卡视频在线观看| 美腿丝袜亚洲图片| 午夜视频在线观看网站| 男人的天堂成人| 91精品国产91久久久| 91精品福利视频| 成人午夜在线播放| 欧美综合在线视频观看| 宅男在线观看免费高清网站| 久热免费在线观看| 51国偷自产一区二区三区 | 尤物视频在线看| 成年人免费在线播放| 国产在线播放91| 亚洲欧美国产精品久久久久久久| 日本一区二区高清| 国内精品久久久久国产盗摄免费观看完整版 | 国产精品男人的天堂| 日韩视频免费观看高清在线视频| bt7086福利一区国产| 亚洲a一区二区三区| 成人影院大全| 亚洲精华国产精华| 亚洲欧洲日韩综合二区| 97色在线视频观看| 日韩一级大片在线观看| 欧美国产精品v| 天堂在线亚洲视频| 美女精品一区最新中文字幕一区二区三区 | 日韩精品黄色| 国产一线二线三线在线观看| 97免费资源站| 久久91超碰青草是什么| 欧美另类变人与禽xxxxx| 91麻豆国产精品久久| 一区在线观看| 全国精品免费看|