• 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

    • URLConnection

    接下来,不过这些不同的客户端,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 = this.restTemplate.getForObject("http://localhost/user/1", User.class);
            System.out.println(user);
        }
    }

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

  • 相关阅读:
    二叉树之求叶子结点个数
    求二叉树的深度
    二叉树的基本操作
    二叉树之求结点个数
    数组面试
    数组之求子数组的最大乘积
    字符串之子串
    最近遇到的几个纯C编程的陷阱
    Ubuntu 16.04 64位安装YouCompleteMe
    Linux和Windows的遍历目录下所有文件的方法对比
  • 原文地址:https://www.cnblogs.com/flypig666/p/11699526.html
Copyright © 2020-2023  润新知