使用Spring-Cloud项目进行REST客户端调用有几种有趣的方法。 Spring-Cloud REST支持建立在核心Netflix OSS库的基础上,但将它们抽象化并在此过程中简化了库的使用。

RestTemplate

首先,让我们考虑使用RestTemplate通过基于Spring的应用程序进行Rest调用的传统方法:

public class RestTemplateIntegrationTest {@Autowiredprivate RestTemplate restTemplate;@Testpublic void testCallPongService() {ResponseEntity<MessageAcknowledgement> ack =restTemplate.exchange("http://servicehost/message",HttpMethod.POST,new HttpEntity<>(new Message("test", "hello")),MessageAcknowledgement.class,Collections.emptyMap());assertThat(ack.getBody().getPayload(), equalTo("Pong From Configuration Server"));}
}

在此特定实例中,预期客户端将完全知道url的主机部分,RestTemplate将负责将Java对象编组为适当的媒体类型,进行REST调用,并将响应编组回Java对象。 。

带功能区和尤里卡的RestTemplate

Netflix Ribbon提供了一个用于进行基于REST的调用的库,而使用RestTemplate可以使客户端完全了解该主机,而使用Ribbon则通常可以通过集中式Netflix Eureka服务器来解析该主机,并且Ribbon可以在以下情况下实现负载均衡找到一个服务的多个主机。 如果在类路径中存在Spring-cloud库和Ribbon相关的库,则Spring-Cloud将RestTemplate增强为基于Ribbon,而不需要其他配置,而Spring-Cloud的调用完全像以前一样,但有一些变化。

ResponseEntity<MessageAcknowledgement> ack =restTemplate.exchange("http://sample-pong/message",HttpMethod.POST,new HttpEntity<>(new Message("test", "hello")),MessageAcknowledgement.class,Collections.emptyMap());

所不同的是,在这种情况下,主机名是“ sample-pong”,不是真正的主机名,而是试图在Eureka中查找以该名称作为注册名称的服务器列表。结果主机/端口用于发出请求。

如果需要自定义,则可以为命名客户端提供为命名客户端指定的Ribbon功能区特定属性,方法如下:

ResponseEntity<MessageAcknowledgement> ack =restTemplate.exchange("http://samplepong/message",HttpMethod.POST,new HttpEntity<>(new Message("test", "hello")),MessageAcknowledgement.class,Collections.emptyMap());

上面命名的客户端为“ samplepong”,此客户端的功能区特定属性如下:

samplepong:ribbon:DeploymentContextBasedVipAddresses: sample-pongNIWSServerListClassName: com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerListReadTimeout: 5000MaxAutoRetries: 2
  • 如果您对功能区的更多低级配置感兴趣, 请参阅此处

Ribbon是进行REST调用的一种相当复杂的底层方法,RestTemplate抽象化Ribbon的实现并使其从客户端的角度看起来很容易。

Netflix Feign

Netflix Feign是对基于REST的服务进行调用的另一种简化方法,它所需要的只是一个带有相关注释的接口,最好通过一个示例进行演示:

import org.bk.consumer.domain.Message;
import org.bk.consumer.domain.MessageAcknowledgement;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;@FeignClient("samplepong")
public interface PongClient {@RequestMapping(method = RequestMethod.POST, value = "/message",produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)MessageAcknowledgement sendMessage(@RequestBody Message message);
}

尽管注释是特定于Spring的,但Spring-Cloud通过添加支持Spring MVC注释的编码器和解码器来简化此操作。

接口上的@FeignClient批注将其标识为FeignClient代码。 在Spring Configuration中需要@EnableFeignClients来加载所有这样的FeignClient。

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class PingApplication {public static void main(String[] args) {SpringApplication.run(PingApplication.class, args);}
}

资源资源

  • Spring Cloud文档
  • Josh Long的博客,关于使用Spring Cloud和Netflix的Eureka进行微服务注册和发现

翻译自: https://www.javacodegeeks.com/2015/09/rest-client-calls-with-spring-cloud.html

使用Spring Cloud休息客户电话相关推荐

  1. Spring Cloud 中文文档

    Spring Cloud 官方文档 Spring Cloud为开发人员提供了用于快速构建分布式系统中某些常见模式的工具(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线).分布式系统的协调 ...

  2. Spring Cloud微服务系统架构的一些简单介绍和使用

    Spring Cloud 目录 特征 云原生应用程序 Spring Cloud上下文:应用程序上下文服务 引导应用程序上下文 应用程序上下文层次结构 改变Bootstrap的位置Properties ...

  3. 带有Netflix Ribbon的Spring Cloud Rest Client-基础知识

    在较早的博客文章中,我介绍了Spring Cloud世界中REST客户端的各种选项. 所有选项围绕着基于Netflix OSS的名为Ribbon的组件,该组件处理与承载服务的不同实例之间的调用负载平衡 ...

  4. [转]Spring Cloud在国内中小型公司能用起来吗?

    原文地址:http://www.cnblogs.com/ityouknow/p/7508306.html 原文地址:https://www.zhihu.com/question/61403505 今天 ...

  5. Spring Cloud 系列之 Alibaba Nacos 注册中心(一)

    前言 从本章节开始,我们学习 Spring Cloud Alibaba 相关微服务组件. Spring Cloud Alibaba 介绍 Spring Cloud Alibaba 致力于提供微服务开发 ...

  6. Spring Cloud Alibaba系列使用(二)----Nacos注册中心

    1|1Spring Cloud Alibaba 介绍 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spri ...

  7. Spring Cloud Dalston.RELEASE中文文档

    Spring Cloud Dalston.RELEASE中文文档 Spring Cloud 目录 特性 云原生应用程序 Spring Cloud上下文:应用程序上下文服务 引导应用程序上下文 应用程序 ...

  8. Spring Cloud(十一)高可用的分布式配置中心 Spring Cloud Bus 消息总线集成(RabbitMQ)

    上一篇文章,留了一个悬念,Config Client 实现配置的实时更新,我们可以使用 /refresh 接口触发,如果所有客户端的配置的更改,都需要手动触发客户端 /refresh ,当服务越来越多 ...

  9. spring cloud连载第二篇之Spring Cloud Config

    Spring Cloud Config Spring Cloud Config为分布式服务提供了服务侧和客户侧的外部配置支持.通过Spring Cloud Config你可以有一个统一的地方来管理所有 ...

最新文章

  1. 1.5 Kali Linux策略
  2. Swift实现Touch ID验证
  3. mac OS下显示.htaccess等隐藏文件
  4. ASP.NET MVC 3.0学习系列文章—Model in ASP.NET MVC 3.0
  5. win10 安装xilinx 14.7 之后打开new project 奔溃解决方法
  6. python中index函数_python中index函数的用法
  7. 9行代码满分 【C语言】 L1-062 幸运彩票 (15分)
  8. 静态资源部署到服务器不能访问
  9. 程序员利用测试账户套现千万美元,或面临20年监禁
  10. 信息学奥赛一本通C++语言——1078:求分数序列和
  11. AJPFX关于JDK,JRE,JVM的区别与联系
  12. SqlHelper帮助类_上(SQLServer数据库含Connection详解)
  13. c语言计算器程序设计,c语言计算器代码程序设计报告.docx
  14. 在HTML页面添加数学公式格式
  15. 遭遇nat.exe,socks.exe,USP10.dll,BOSC.dll,kb080387.CNT,~ctwxw.txt等1
  16. 网易公开课 mysql_“网易云课程”SQL分析
  17. vnc远程控制软件配置,vnc远程控制软件怎么配置的,教程详解
  18. 音乐相册源码php,分享使用JavaScript制作微信音乐相册实例
  19. 华为MA5600配置radius认证登陆
  20. excel 操作技巧

热门文章

  1. 什么?java中居然可以执行js代码了?真是不知者不怪
  2. 压力与动力是否成正比?
  3. pycharm 的version controller
  4. hashmap存多少条数据_干货 | 面试官想问的HashMap,都在这一篇里面了!
  5. 用枚举enum实现单例
  6. linux-basic(7)linux文件与目录管理
  7. 数据库表连接总结:等值连接, 自然连接,左外连接,右外连接,内连接,全外连接;
  8. java_basic_review(5) java继承
  9. java流与文件——ZIP文档
  10. x86 的 TSS 任务切换机制