Dubbo是RPC,那么Feign呢?


概述

  • RPC (Remote Procedure Call)遠程過程調用。網上更多的說法RPC是一種協議,需要滿足一定的規范,因為不是說一個服務調了另一個服務就算是RPC,比如我可以通過restTemplate調用另一個服務的rest接口,這也算是一個服務調用了另一個服務,但是這不能叫RPC。

  • 舉例:在微服務的設計中,一個服務A如果訪問另一個Module下的服務B,可以采用HTTP REST傳輸數據,並在兩個服務之間進行序列化和反序列化操作,服務B把執行結果返回過來。(后端請求微信接口)

  • image

  • RPC需要達到的是:客戶端在不知道調用細節的情況下,調用存在於遠程計算機上的某個對象,就像調用本地應用程序中的對象一樣。

  • RPC需要滿足三個條件:

    -網絡協議和網絡IO模型對其透明

    -信息格式對其透明

    -應該有跨語言能力

Dubbo

  • Dubbo是阿里巴巴開源的基於Java的高性能RPC分布式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。
/ / dubbo里的@Service注解
import org.apache.dubbo.config.annotation.Service;
@service
public class AppserviceImpl imp1ements IAppService {
@Autowired
AppMapper appMapper;
@override
public AppDTo createApp(AppDTo appDT0) throws BizException {
return null;
}
@s1f4j
Restcontroller
public class AppContro1ler {//遠程調用
@Reference
IAppservice appservice;
public AppDTo createApp(@RequestBody Appvo appVo){
return appservice.createApp(appDTO);
}
  • 傳輸層
  • 利用Netty,TCP傳輸,單一、異步、長連接,適合數據量么、高並發和服務提供者遠遠少於消費者的場景。

image

image

Feign

  • Feign是Spring Cloud提供的一個聲明式的偽Http客戶端,封裝了Http調用流程,更適合面向接口化的變習慣,它使得調用遠程服務就像調用本地服務一樣簡單,只需要創建一個接口並添加一個注解即可。
  • Nacos注冊中心很好的兼容了Feign,Feign默認集成了Ribbon (Ribbon是Netflix開源的基於HTTP和TCF等協議負載均衡組件),所以在Nacos下使用Fegin默認就實現了負載均衡的效果。

image

image

image

  • 應用層
  • Feign本身不支持Spring MVC的注解,它有一套自己的注解(@ReguestLine).openFeign是SpringCloud 在Feign的基礎上支持了Spring MVC的注解,如@RequesMapping等等。OpenEeign的
    @Feignc1ient可以解析SpringMVC的@RequestMapping注解下的接口,並通過動態代理的方式產生實現類,將請求調用委托到動態代理實現類。

image

  • Feigh整體框架非常小巧,在處理請求轉換和消息解析的過程中,基本上沒什么時間消耗。真正影響性能的,是處理Http請求的環節。
  • 通過短連接的方式進行通信,不適合高並發的訪問。

總結

  • 功能上Dubbo > Feign
  • Dubbo除了注冊中心需要進行整合,負載均衡、服務治理、容錯機制等都自己實現了,而Feign大部分功能都是依賴全家桶的組件來實現的。
  • SpringClaud全家桶里面(Feign、Ribbon、Hystrix),特點是非常方便。Ribbon、Hystrix、Feign在服務治理中,配合Spring Cloud做微服務,使用上有很多優勢。
  • 如果項目對性能要求不是很嚴格,可以選擇使用Feign,它使用起來更方便。如果需要提高性能,避開基於Http方式的性能瓶頸,可以使用Dubbo。

問題Feign算不算RPC框架?

  • 有人認為是,因為Feign達到了RPC的要求。
  • 有人認為不是,認為RPC主要依賴於客戶端和服務端之間建立Socket鏈接進行,通過TCP協議傳輸數據而不是HTTP。

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM