在较早的博客文章中,我介绍了Spring Cloud世界中REST客户端的各种选项。 所有选项围绕着基于Netflix OSS的名为Ribbon的组件,该组件处理与承载服务的不同实例之间的调用负载平衡,处理故障转移,超时等有关的方面。在此,我将介绍几种自定义基础Ribbon组件行为的方法。与Spring Cloud结合使用,并进行更全面的自定义。

创建一个休息客户

回顾一下,首先考虑需要调用简单服务的情况:

使用Spring进行此调用的典型方法是注入RestTemplate并使用它通过以下方式进行此调用:

public class RestTemplateBasedPongClient implements PongClient {@Autowiredprivate RestTemplate restTemplate;@Overridepublic MessageAcknowledgement sendMessage(Message message) {String pongServiceUrl = "http://serviceurl/message";HttpEntity<Message> requestEntity = new HttpEntity<>(message);ResponseEntity<MessageAcknowledgement> response =  this.restTemplate.exchange(pongServiceUrl, HttpMethod.POST, requestEntity, MessageAcknowledgement.class, Maps.newHashMap());return response.getBody();}}

这里没有什么特别的。 但是,当使用Spring Cloud时,相同的代码会有所不同,现在RestTemplate内部使用Netflix OSS Ribbon库进行调用。 这很有帮助,因为典型的调用流程是首先找到运行该服务的实例,然后在这些实例之间对调用进行负载平衡并保持此状态。

带功能区的其他客户端

让我稍微谈一下功能区,功能区使用一种称为“命名客户端”的抽象来控制远程服务调用的行为–远程服务调用的名称,在Eureka上注册的服务,服务调用的超时,重试多少次这些是通过配置文件指定的,并且条目通常沿着这些行,请注意,此处的“命名客户端”是“ samplepong”,并且属性具有此前缀:

samplepong.ribbon.MaxAutoRetries=2
samplepong.ribbon.MaxAutoRetriesNextServer=2
samplepong.ribbon.OkToRetryOnAllOperations=true
samplepong.ribbon.ServerListRefreshInterval=2000
samplepong.ribbon.ConnectTimeout=5000
samplepong.ribbon.ReadTimeout=90000
samplepong.ribbon.EnableZoneAffinity=false
samplepong.ribbon.DeploymentContextBasedVipAddresses=sample-pong
samplepong.ribbon.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList

回到Spring Cloud,它通过Url主机名非常巧妙地支持“命名客户端”的概念,因此RestTemplate调用现在看起来像这样:

ResponseEntity<MessageAcknowledgement> response =  this.restTemplate.exchange("http://samplepong/message", HttpMethod.POST, requestEntity, MessageAcknowledgement.class, Maps.newHashMap());

URL中的“ samplepong”是“命名客户端”,可以通过使用此前缀指定属性来对基础功能区的行为进行任何自定义。 由于这是Spring Cloud应用程序,因此可以按照以下方式以yaml格式明确指定属性:

samplepong:ribbon:DeploymentContextBasedVipAddresses: sample-pongReadTimeout: 5000MaxAutoRetries: 2

结论

这涵盖了Spring Cloud如何抽象出基础Ribbon库以提供非常直观的外观以在Cloud环境中进行远程服务调用的基础知识。 在一些自定义项上,我已经浏览了一些细节,我将在较新的文章中介绍这些细节。

  • 这是我的github存储库 ,其中包含我在本文中使用的代码。

翻译自: https://www.javacodegeeks.com/2015/12/spring-cloud-rest-client-netflix-ribbon-basics.html

带有Netflix Ribbon的Spring Cloud Rest Client-基础知识相关推荐

  1. Spring Cloud的负载均衡Spring Cloud Ribbon和Spring Cloud Feign

    一.客户端负载均衡:Spring Cloud Ribbon. Spring Cloud Ribbon是基于HTTP和TCP的客户端负载工具,它是基于Netflix Ribbon实现的.通过Spring ...

  2. 【Spring Cloud 基础设施搭建系列】Spring Cloud Demo项目 Spring Cloud Config Client 失败快速响应与超时重试

    文章目录 Spring Cloud Config Client 失败快速响应与重试 测试 参考 源代码 Spring Cloud Config Client 失败快速响应与重试 Spring Clou ...

  3. spring 集成 spring cloud config 的相关知识

    这两篇 主要是在集成过程中 对相关知识的学习 1.了解springApplication 非spring boot 使用Spring cloud config (1) 了解springApplicat ...

  4. 【Spring Boot】1.基础知识

    2019独角兽企业重金招聘Python工程师标准>>> 前言 该相关文档其实是学习一段名为"尚硅谷Spring Boot的学习视频"的过程中所做的笔记,教导老师讲 ...

  5. cloud探索 - ASW基础知识

    AWS 开发人员工具 开发人员工具 描述 Web 控制台 Amazon Web Services 的简单 Web 界面 命令行工具 通过命令行控制您的 AWS 服务并通过脚本自动进行服务管理 集成开发 ...

  6. spring cloud config client refresh过程

    整体流程(触发EnvironmentChangeEvent事件) 响应EnvironmentChangeEvent事件(进行rebind) RefreshEndpoint @Configuration ...

  7. Spring IOC和MVC基础知识

    (1)SpringBoot分析 – Spring IOC原理解析 IOC,控制反转 Spring,避免那些可能致使代码变得繁杂.混乱的大量业务工具组合在一起,包括它的创建与销毁,等等,会帮助你进行管理 ...

  8. Spring Cloud入门-Ribbon服务消费者(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 Ribbon简介 RestTemplate的使用 GET请求方法 getForObject方法 getForEntity方法 POST请求方法 p ...

  9. Spring Cloud微服务简介

    1. 基础知识1 什么是微服务架构? 与单体系统的区别 如何实施微服务? 微服务优缺点 为什么选择Spring Cloud? 微服务技术选型 为什么选择Spring Cloud? Spring Clo ...

最新文章

  1. 微信小程序 长按图片不出现菜单_微信更新,新功能上了热搜
  2. option:contains后面加变量_什么是配置环境变量,配置以后有什么作用呢?
  3. 冒泡算法的三种JavaScript表示
  4. 如何在IE让用户自动下载ActiveX控件?
  5. 国家生物信息中心在核酸研究发表单细胞DNA甲基化数据库—scMethBank
  6. axios vue 回调函数_VUE使用axios调用后台API接口的方法
  7. C++头文件<functional>和bind、placeholders占位符使用简单例子
  8. 关于u-boot中的.balignl 16,0xdeadbeef的理解
  9. 图形用户界面GUI会被淘汰吗
  10. 更新日志_CargoWare系统云平台更新日志2020.11.24
  11. 第三章 网络体系结构作业
  12. EVEREST工具---检测硬件
  13. Spring Boot消息服务
  14. matlab用图像,Matlab常用图像操作
  15. 股票涨跌的心理学原理: 过度反应理论
  16. python--测试使用不同的方式计算位涡平流项的差异
  17. WPF无弹窗打印_se7en3_新浪博客
  18. 数据处理取对数的作用
  19. 国外域名注册商域名不许国内解析
  20. 【Java学习】从Java历史背景到创建第一个工程——超详细Java入门(多图预警

热门文章

  1. sqlserver建库建表建约束,删库删表删约束的示例总结
  2. 所有的软弱,都是昂贵的
  3. echart vue 图表大小_vue之将echart封装为组件
  4. 总结尚硅谷的视频springboot视频
  5. linux下单点故障的软件,KeepAlived防止单点故障
  6. pythonnumpy教程_Python教程:numpy的基本介绍
  7. 报错:The type javax.servlet.http.HttpServletRequest cannot be resolved
  8. 异常java.lang.Thread.dumpStack(Unknown Source)
  9. micrometer_具有InlfuxDB的Spring Boot和Micrometer第2部分:添加InfluxDB
  10. 两个时间之间是多少小时_那是两个小时我不会回来