网站首页 > 文章精选 正文
RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有:
应用级的服务框架: Dubbo、Google gRPC、Spring Boot/Spring Cloud。
远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。
通信框架: Netty,MINA等。
基于 HTTP 协议的 RPC 调用
底层http请求
HttpURLConnection
JDK 自带的 HttpURLConnection 标准库,是一个多用途、轻量级的http客户端,我们能更容易的扩展和优化的HttpURLConnection。HttpURLConnection继承URLConnection,底层socket,最原始通信。
HttpClient
是apache的一个项目,封装了很多底层细节。HttpClient 是Apache的一个三方网络框架,网络请求做了完善的封装,api众多,用起来比较方便,开发快。但是我们很难再不破坏兼容性的情况下对其进行扩展。
OkHttp
OkHttp 是 Square 公司开源的针对 Java 和 Android 程序,封装的一个高性能 http 请求库。
基于Rest的封装之RestTemplate
RestTemplate是Spring提供的用于访问Rest服务的客户端。使用restTemplate访问restful接口非常的简单粗暴无脑。其灵活可扩展:手动指定转换器(HttpMessageConverter),设置底层连接方式,设置拦截器,Ribbon+RestTemplate。
手动指定转换器(HttpMessageConverter)
我们知道,调用reseful接口传递的数据内容是json格式的字符串,返回的响应也是json格式的字符串,你可以可以调整自己的返回格式,指定对应的转换器。
设置底层连接方式
刚才上面说过真正发起http请求的还是底层组件:HttpURLConnection,HttpClient,OkHttp,可以通过设置指定基于什么发起请求,如果想用连接池可以用HttpClient。
设置拦截器
有时候我们需要对请求做一些通用的拦截设置,这就可以使用拦截器进行处理,比如写一个在header中根据请求内容和地址添加令牌的拦截器。
Ribbon+RestTemplate
如果请求的同一个服务有多个节点,这个时候可以用ribbon负载均衡,Ribbon是一个负载均衡的工具,提供各种负载均衡算法,Ribbon是一个http客户端,它具备了负载均衡,失败重试等功能。
具体关系如下图:
更便捷的方式Feign
Feign是一个声明式的web服务客户端,使用Feign编写web服务客户端更加容易。
底层请求选择:HttpURLConnection,HttpClient,OkHttp
多节点负载与重试等机制:手动方式,Ribbon 和 Eureka。
熔断机制:Hystrix。
feign的使用方式
方式一 手动方式
UserAction action = Feign.builder()
.decoder(new StringDecoder())
.options(new Request.Options(2000, 5500))
.retryer(new Retryer.Default(3000, 3000, 3))
.target(UserAction.class,"http://localhost:8081/");
方式二 注解方式
@FeignClient(name="producer")
public interface FeignTestClient {
@RequestMapping(value = "/getuser/{id}")
public User getUser(@PathVariable("id") String id);
}
@RestController
public class FeignTestController {
@Autowired
private FeignTestClient feignTestClient;
}
猜你喜欢
- 2025-08-01 go-zero 实践 - 编写仓储、订单RPC\API服务(五)
- 2025-08-01 PS3安卓模拟器“换马甲”重生:RPCSX-UI-Android上线
- 2025-08-01 大数据技术大合集:Hadoop、Cloudera...
- 2025-08-01 项目经验分享
- 2025-08-01 腾讯开源框架TarsCpp-rpc设计分析-client(一)
- 2025-08-01 什么是RPC?什么是Restful?它们有什么区别?
- 2025-08-01 日产2000片!南方路机助力中山东环RPC项目实现“超级智造”投产
- 2025-08-01 教你用 Netty 实现一个简单的 RPC
- 2025-08-01 6种微服务RPC框架,你知道几个?
- 2025-08-01 设计了一款TPS百万级别的分布式、高性能、可扩展的RPC框架
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)
- fmt.println (52)