应用层协议和功能目标
RPC和Feign的主要区别在于它们的应用层协议和功能目标。
RPC(Remote Procedure Call) 是一种远程调用协议,它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。RPC的主要功能目标是让构建分布式计算(应用)更容易,提供强大的远程调用能力同时不损失本地调用的语义简洁性。RPC框架如Dubbo、gRPC等,提供了服务注册、服务发现、服务治理、服务监控、服务负载均衡等功能。
Feign 是一个基于HTTP协议的轻量级框架,作为Spring Cloud的重要组成部分,它简化了使用基于HTTP的远程服务的开发。Feign通过创建接口并添加一些注解来动态生成实现类,这些实现类在运行时执行HTTP请求,与远程服务进行通信。Feign内部可以配置不同的HTTP客户端实现来进行实际的网络IO操作,比如使用Java的HttpURLConnection、Apache HttpClient或者OkHttp等库来执行请求。
简而言之,RPC是一种更底层的协议,强调服务之间的远程调用和分布式系统的通信,而Feign则是一个基于HTTP协议的框架,提供了更为便捷的服务调用方式。在微服务体系中,基于HTTP风格的远程调用通常使用Feign来实现,而基于RPC的远程调用则通常使用Dubbo等框架来实现。