SpringCloud--服务调用(RestTemplate)

服务调用

        首先想一想,在用户下单时需要调用商品微服务获取商品数据,那应该怎么做呢?总人皆知商品微服务提供了供人调用的HTTP接口。所以可以再下定单的时候使用http请求的相关工具类完成,如常见的HttpClient,OkHttp,当然也可以使用Spring提供的RestTemplate。

 1.RestTemplate介绍

        Spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接, 我们只需要传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。类有关。RestTemplate类的设计原则与许多其他Spring 模板类(例如JdbcTemplate、JmsTemplate)相同,为执行复杂任务提供了一种具有默认行为的简化方法。

        RestTemplate默认依赖JDK提供http连接的能力(HttpURLConnection),如果有需要的话也可以通过setRequestFactory方法替换为例如 Apache HttpComponents、Netty或OkHttp等其它HTTP library。考虑到RestTemplate类是为调用REST服务而设计的,因此它的主要方法与REST的基础紧密相连就不足为奇了,后者是HTTP协议的方法:HEAD、GET、POST、PUT、DELETE和OPTIONS。例如,RestTemplate类具有headForHeaders()、getForObject()、postForObject()、put()和delete()等方法。

 2.RestTemplate的使用

        1.首先注册一个RestTemplate的实例到Spring容器,在服务提供者的启动类中注册一个Bean

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

        2.接下来我们就可以使用这个restTemplate去进行远程调用另一个服务

        在需要调用的实现类里自动装配进来

    @Autowired
    private RestTemplate restTemplate;

        使用restTemplate进行调用

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.利用RestTemplate发起http请求,查询用户
        // 2.1.url路径
        String url = "http://127.0.0.1:8081/user/" + order.getUserId();
        // 2.2.发送http请求,实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 3.封装user到Order
        order.setUser(user);
        // 4.返回
        return order;
    }

        那么现在我们就使用了restTemplate进行了远程调用

 3.提供者和消费者

        在服务调用的关系中,会产生提供者和消费者这两个不同的角色,

        1.服务提供者:就是提供接口给其它微服务

        2.服务消费者:是调用其他微服务所提供的接口

        那如果有A,B,C三个服务,那么A调用B而B又调用了C,对于A调用B来说,A是服务消费者,B就是服务提供者,对于B调用了C,那么B是服务消费者,C是服务提供者。

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值