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

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

创建一个休息客户

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

SampleServiceCall

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

public class RestTemplateBasedPongClient implements PongClient {

    @Autowired
    private RestTemplate restTemplate;

    @Override
    public 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-pong
    ReadTimeout: 5000
    MaxAutoRetries: 2

结论

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值