關(guān)于dubbo的RPC和RESTful性能及對比
更新時間:2022年12月19日 10:04:44 作者:fomeiherz
這篇文章主要介紹了關(guān)于dubbo的RPC和RESTful性能及對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
先上結(jié)論
RPC請求的效率是HTTP請求的1.6倍左右,性能明顯比HTTP請求要高很多。
原因分析
RESTful是基于HTTP協(xié)議進行交互的,HTTP協(xié)議包含大量的請求頭、響應頭信息。
而dubbo是基于dubbo自定義的二進制協(xié)議進行傳輸,消息體比較簡單,傳輸數(shù)據(jù)要小很多。
HTTP請求代碼
// 服務端基于spring boot搭建 // 服務端代碼 @SpringBootApplication @RestController public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @RequestMapping("/helloworld") public String helloworld() { return "hello world"; } } // 客戶端代碼 import org.springframework.util.StopWatch; import org.springframework.web.client.RestTemplate; public class HelloworldTest { public static void main(String[] args) { RestTemplate restTemplate = new RestTemplate(); StopWatch stopWatch = new StopWatch(); stopWatch.start(); for (int j = 0; j < 10; j++) { System.out.println("------------------"); for (int i = 1; i <= 10000; i++) { restTemplate.getForObject("http://127.0.0.1/helloworld", String.class); if (i % 1000 == 0) { stopWatch.stop(); System.out.println(stopWatch.getTotalTimeSeconds()); stopWatch = new StopWatch(); stopWatch.start(); } } } } }
RPC代碼
// dubbo-demo工程的代碼,詳情請看:https://github.com/apache/dubbo/tree/master/dubbo-demo // 服務端 public class DemoServiceImpl implements DemoService { @Override public String sayHello(String name) { return "Hello " + name + ", response from provider: " + RpcContext.getContext().getLocalAddress(); } } // 客戶端 public class Consumer { public static void main(String[] args) { //Prevent to get IPV6 address,this way only work in debug mode //But you can pass use -Djava.net.preferIPv4Stack=true,then it work well whether in debug mode or not System.setProperty("java.net.preferIPv4Stack", "true"); ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-consumer.xml"}); context.start(); DemoService demoService = (DemoService) context.getBean("demoService"); // get remote service proxy StopWatch stopWatch = new StopWatch(); stopWatch.start(); for (int j = 0; j < 10; j++) { System.out.println("-----------"); for (int i = 1; i <= 10000; i++) { demoService.sayHello("world"); // call remote method if (i % 1000 == 0) { stopWatch.stop(); System.out.println(stopWatch.getTotalTimeSeconds()); stopWatch = new StopWatch(); stopWatch.start(); } } } } }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot整合阿里云OSS對象存儲服務的實現(xiàn)
這篇文章主要介紹了SpringBoot整合阿里云OSS對象存儲服務的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08mybatis對象List<String> List<Integer>屬性映射方式
這篇文章主要介紹了mybatis對象List<String> List<Integer>屬性映射方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12java常用工具類 XML工具類、數(shù)據(jù)驗證工具類
這篇文章主要為大家詳細介紹了java常用工具類,包括XML工具類、數(shù)據(jù)驗證工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05spring boot 防止重復提交實現(xiàn)方法詳解
這篇文章主要介紹了spring boot 防止重復提交實現(xiàn)方法,結(jié)合實例形式詳細分析了spring boot 防止重復提交具體配置、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下2019-11-11Mybatis-Plus最優(yōu)化持久層開發(fā)過程
Mybatis-plus(簡稱MP)是一個Mybatis的增強工具,在mybatis的基礎(chǔ)上只做增強不做改變,提高效率,自動生成單表的CRUD功能,這篇文章主要介紹了Mybatis-Plus最優(yōu)化持久層開發(fā),需要的朋友可以參考下2024-07-07