四、基于RestTemplate的微服务调用

前面我们已经成功的把第一个小案例跑起来了,其中消费者使用了RestTemplate来调用提供者提供的微服务,下面就来详细的说明一下RestTemplate的用法!

4.1 RestTemplate介绍

Spring框架提供了RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接,我们只需要传入url以及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。

在Spring应用程序中访问第三方REST服务与使用Spring RestTemplate类有关。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()等方法。

4.2 RestTemplate方法介绍

该模板类的主要切入点为一下几个方法,并对应这HTTP的六个主要方法:

HTTP method RestTemplate methods
GET getForObject(String,Class< T >,Object…)
getForEntity(String,Class< T >,Object…)
POST postForLocation(String,Object,Object…)
postForObject(String,Object,Class< T >,Object…)
PUT put(String,Object,Object…)
DELETE delete(String,Object…)
HEAD headForHeaders(String,Object…)
OPTIONS optionsFoeAllow(String,Object…)
any exchange(String,HttpMethod,HttpEntity<?>,Class< T >,Object…)
execute(String,HttpMethod,RequestClaaback,ResponseExtractor< T >,Object…)

4.3 通过RestTemplate调用微服务

  • 在消费者方配置启动类

    在启动类中注入RestTemplate的bean实例

    /*** 配置RestTemplate交给spring管理* @return*/
    @Bean
    public RestTemplate restTemplate()
    {return new RestTemplate();
    }
    
  • 在消费者方Controller编写方法

    package cn.ebuy.order.controller;
    import cn.ebuy.order.pojo.EasybuyProduct;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.client.ServiceInstance;
    import org.springframework.cloud.client.discovery.DiscoveryClient;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    import java.util.List;
    @RestController
    @RequestMapping("/order")
    @SuppressWarnings("all")
    public class OrderController {@AutowiredRestTemplate restTemplate;@Autowiredprivate DiscoveryClient discoveryClient;/*** 这里的地址是没有做集群时的写法,只有一个地址* @param id* @return*/@RequestMapping(value = "/{id}",method = RequestMethod.GET)public EasybuyProduct findById(@PathVariable Long id) {EasybuyProduct easybuyProduct=new EasybuyProduct();// 这里是调用product里的服务,端口号是:9011    easybuyProduct=restTemplate.getForObject("http://127.0.0.1:9011/product/"+id,EasybuyProduct.class);return easybuyProduct;}
    }
    

4.4 硬编码存在的问题

现在,我们已经可以通过RestTemplate调用商品微服务的RESTful API接口,但是很明显我们使用的是提供者的网络地址(ip:端口)等硬编码到了代码中,这种做法存在许多问题:

  • 应用场景有局限;
  • 无法动态调整

这个时候我们就很容易想到例如Dubbo这样的注册中心,将服务注册到注册中心,通过注册中心动态的对服务注册和服务发现。

Spring Cloud之(四)基于RestTemplate的微服务调用相关推荐

  1. 【Spring Cloud Alibaba】(二)微服务调用组件Feign原理+实战

    系列目录 [Spring Cloud Alibaba](一)微服务介绍 及 Nacos注册中心实战 本文目录 系列目录 前言 什么是RPC? Feign和OpenFeign都是什么? HTTP调用 v ...

  2. 阿里新框架发布!干掉Spring Cloud,换下Dubbo,微服务王者来了!

    目前,但凡谈及微服务技术选型,就必然会遇到一个两难的抉择,到底该采用Dubbo,还是该选择Spring Cloud呢? 当初阿里于2017年宣布重新开源Dubbo,近年来Dubbo发展速度和势头可谓是 ...

  3. Spring Cloud Gateway面试攻略,微服务网关的作用以及案例

    微服务系列导航 第一篇:初学者如何快速入门微服务,面试前如何快速熟悉微服务 第二篇:微服务Spring Cloud Alibaba之Nacos篇, Nacos 就是注册中心 + 配置中心的组合 第三篇 ...

  4. 微服务等于Spring Cloud?一文告诉你微服务到底是什么

    作者:TIM XU 原文:https://xiaoxubeii.github.io/articles/microservices-architecture-introduction/ 1 微服务初探 ...

  5. 【Spring Cloud Alibaba】(一)微服务介绍 及 Nacos注册中心实战

    文章目录 前言 I.微服务与Spring Cloud II.Nacos 注册中心 III.Spring Cloud Alibaba Nacos 实战 1.新建父工程 2.新建demo-a 服务 3.新 ...

  6. Dubbo跟Spring Cloud哪个更好用?“微服务”第二代又赢了!

    5年前面试最常问的并且可以顺利拿到高薪的技能是Dubbo,2年前面试,只要你简历上有Spring Cloud项目的相关经验,肯定会打动面试官,现在呢?恐怕简历上有Dubbo和简单的Spring Clo ...

  7. 微服务应用-基于Spring Cloud和Reactor构建网上商店微服务(下)

    前言 上篇主要是讲解理论知识和项目架构要点,这篇将集中在微服务中使用spring Boot.Spring Cloud和Project Reactor实现事件溯源的原始主题.文章中也会介绍项目实现一些技 ...

  8. 带有Spring Cloud Config和JHipster的Java微服务

    朋友不允许朋友写用户身份验证. 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK. 在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. 如今,使用Java和Spring ...

  9. Spring Cloud之(十八)微服务网关GateWay

    十八.微服务网关GateWay Zuul 1.x 是一个基于阻塞 IO 的 API Gateway 以及 Servlet:直到 2018 年 5 月,Zuul 2.x(基于Netty,也是非阻塞的,支 ...

最新文章

  1. 多传感器融合(算法)综述
  2. 2022年全球及中国滑雪铲行业品牌调研与市场消费规模分析报告
  3. php根据地址获取经纬度
  4. 【317】python 指定浏览器打开网页 / 文件
  5. android默认获取敏感权限
  6. win7一直显示正在启动_win7系统中提高启动速度并且禁用某些软件启动的操作小技巧...
  7. python如何统计累计每日的人数‘’_Python数据分析2019陕西高考(理工)成绩及填报志愿...
  8. Url有值怎么使用get传值
  9. 安装sw时出现sldim停止工作_脉冲滤筒除尘器的安装有哪些小常识
  10. c语言双精度型输出小数位数_C语言的double与float类型最多只能默认输出小数位数都取6位?...
  11. java 打印堆栈_Java打印完整的堆栈信息
  12. swustoj堆排序算法(1015)
  13. IPv6 节点主动访问 IPv4 节点-地址池方式的NAT64配置
  14. [极客时间] 时间复杂度和空间复杂度分析
  15. 网易面试总结——面试案例5~面试案例8
  16. 2022-2027年中国家用清洁产品行业发展监测及投资战略研究报告
  17. CTFshow-萌新
  18. Pulling 1 repository Exception caught during execution of merge command
  19. Java:Java vs Kotlin–Android应用程序开发的最佳语言?
  20. 详解数组,链表和ADT

热门文章

  1. JS 下载文件两种方式总结
  2. 【4D毫米波雷达技术发展趋势分析】
  3. 两次参加中国大学生服务外包大赛的感悟
  4. 利用python + pyecharts+Pandas对北上广深等城市进行租房数据分析
  5. ETL工具之Kettle开发教程第一节-入门
  6. 从0到1使用ES实现昼伏夜出算法(环境搭建到页面效果)
  7. JavaScript Basics
  8. Linux阿里云服务器Tomact从部署到放弃(踩坑系列)
  9. 微信小程序如何实现版本自动更新
  10. IDEA的导入Seckill项目后,启动出现404的解决办法