安徽省建设工程协会网站,贵州省住房和城乡建设局网站,网站备案注销,银川市住房和城乡建设网站在较早的博客文章中#xff0c;我介绍了Spring Cloud世界中REST客户端的各种选项。 所有选项围绕着基于Netflix OSS的名为Ribbon的组件#xff0c;该组件处理与承载服务的不同实例之间的调用负载平衡#xff0c;处理故障转移#xff0c;超时等有关的方面。在此#xff0c;… 在较早的博客文章中我介绍了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;HttpEntityMessage requestEntity new HttpEntity(message);ResponseEntityMessageAcknowledgement 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.MaxAutoRetries2
samplepong.ribbon.MaxAutoRetriesNextServer2
samplepong.ribbon.OkToRetryOnAllOperationstrue
samplepong.ribbon.ServerListRefreshInterval2000
samplepong.ribbon.ConnectTimeout5000
samplepong.ribbon.ReadTimeout90000
samplepong.ribbon.EnableZoneAffinityfalse
samplepong.ribbon.DeploymentContextBasedVipAddressessample-pong
samplepong.ribbon.NIWSServerListClassNamecom.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList 回到Spring Cloud它通过Url主机名非常巧妙地支持“命名客户端”的概念因此RestTemplate调用现在看起来像这样 ResponseEntityMessageAcknowledgement 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