首页 文章资讯内容详情

springcloud:RPC和HTTP

2026-06-01 4 花语

本文内容纲要:

-1.RPC和HTTP -2.2.Http客户端工具 -2.3.Spring的RestTemplate

1.RPC和HTTP

无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?

常见的远程调用方式有以下2种:

RPC:RemoteProduceCall远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型代表

Http:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的提供和调用方没有任何技术限定,自由灵活,更符合微服务理念。

现在热门的Rest风格,就可以通过http协议来实现。

如果你们公司全部采用Java技术栈,那么使用Dubbo作为微服务架构是一个不错的选择。

相反,如果公司的技术栈多样化,而且你更青睐Spring家族,那么SpringCloud搭建微服务是不二之选。在我们的项目中,我们会选择SpringCloud套件,因此我们会使用Http方式来实现服务间调用。

2.2.Http客户端工具

既然微服务选择了Http,那么我们就需要考虑自己来实现对请求和响应的处理。不过开源世界已经有很多的http客户端工具,能够帮助我们做这些事情,例如:

HttpClient OKHttp URLConnection

接下来,不过这些不同的客户端,API各不相同

2.3.Spring的RestTemplate

Spring提供了一个RestTemplate模板工具类,对基于Http的客户端进行了封装,并且实现了对象与json的序列化和反序列化,非常方便。RestTemplate并没有限定Http的客户端类型,而是进行了抽象,目前常用的3种都有支持:

HttpClient OkHttp JDK原生的URLConnection(默认的)

首先在项目中注册一个RestTemplate对象,可以在启动类位置注册:

@SpringBootApplication publicclassHttpDemoApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(HttpDemoApplication.class,args); } @Bean publicRestTemplaterestTemplate(){ returnnewRestTemplate(); } }

在测试类中直接@Autowired注入:

@RunWith(SpringRunner.class) @SpringBootTest(classes=HttpDemoApplication.class) publicclassHttpDemoApplicationTests{ @Autowired privateRestTemplaterestTemplate; @Test publicvoidhttpGet(){ //调用springboot案例中的rest接口 Useruser=this.restTemplate.getForObject("http://localhost/user/1",User.class); System.out.println(user); } }

通过RestTemplate的getForObject()方法,传递url地址及实体类的字节码,RestTemplate会自动发起请求,接收响应,并且帮我们对响应结果进行反序列化。

本文内容总结:1.RPC和HTTP,2.2.Http客户端工具,2.3.Spring的RestTemplate,

原文链接:https://www.cnblogs.com/flypig666/p/11699526.html