springcloud:RPC和HTTP
1.RPC和HTTP
⽆论是微服务还是SOA,都⾯临着服务间的远程调⽤。那么服务间的远程调⽤⽅式有哪些呢?
常见的远程调⽤⽅式有以下2种:
RPC:Remote Produce Call远程过程调⽤,类似的还有RMI。⾃定义数据格式,基于原⽣TCP通信,速度快,效率⾼。早期的webservice,现在热门的dubbo ,都是RPC的典型代表
Http:http其实是⼀种⽹络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采⽤Http协议,也可以⽤来进⾏远程服务调⽤。缺点是消息封装臃肿,优势是对服务的提供和调⽤⽅没有任何技术限定,⾃由灵活,更符合微服务理念。
现在热门的Rest风格,就可以通过http协议来实现。
如果你们公司全部采⽤Java技术栈,那么使⽤Dubbo作为微服务架构是⼀个不错的选择。
相反,如果公司的技术栈多样化,⽽且你更青睐Spring家族,那么SpringCloud搭建微服务是不⼆之选。在我们的项⽬中,我们会选择SpringCloud套件,因此我们会使⽤Http⽅式来实现服务间调⽤。
2.2.Http客户端⼯具
既然微服务选择了Http,那么我们就需要考虑⾃⼰来实现对请求和响应的处理。不过开源世界已经有很多的http客户端⼯具,能够帮助我们做这些事情,例如:HttpClient
OKHttp
URLConnectionspringboot其实就是spring
接下来,不过这些不同的客户端,API各不相同
2.3.Spring的RestTemplate
Spring提供了⼀个RestTemplate模板⼯具类,对基于Http的客户端进⾏了封装,并且实现了对象与json的序列化和反序列化,⾮常⽅便。RestTemplate并没有限定Http的客户端类型,⽽是进⾏了抽象,⽬前常⽤的3种都有⽀持:
HttpClient
OkHttp
JDK原⽣的URLConnection(默认的)
⾸先在项⽬中注册⼀个RestTemplate对象,可以在启动类位置注册:
@SpringBootApplication
public class HttpDemoApplication {
public static void main(String[] args) {
SpringApplication.run(HttpDemoApplication.class, args);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
在测试类中直接@Autowired注⼊:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = HttpDemoApplication.class)
public class HttpDemoApplicationTests {
@Autowired
private RestTemplate restTemplate;
@Test
public void httpGet() {
// 调⽤springboot案例中的rest接⼝
User user = ForObject("localhost/user/1", User.class);
System.out.println(user);
}
}
通过RestTemplate的getForObject()⽅法,传递url地址及实体类的字节码,RestTemplate会⾃动发起请求,接收响应,并且帮我们对响应结果进⾏反序列化。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论