SpringCloud微服务架构学习(四)Ribbon

Ribbon是什么?

Ribbon是Netflix公司开源的一个负载均衡的项目,它属于上述的第二种,是一个客户端负载均衡器,运行在客户端上。它是一个经过了云端测试的IPC库,可以很好地控制HTTP和TCP客户端的一些行为。 Feign已经默认使用了Ribbon。

  • 负载均衡
  • 容错
  • 多协议(HTTP,TCP,UDP)支持异步和反应模型
  • 缓存和批处理

Ribbon的主要组件与工作流程

Ribbon的核心组件(均为接口类型)有以下几个:

ServerList:用于获取地址列表。它既可以是静态的(提供一组固定的地址),也可以是动态的(从注册中心中定期查询地址列表)。

ServerListFilter:仅当使用动态ServerList时使用,用于在原始的服务列表中使用一定策略过虑掉一部分地址。

IRule:选择一个最终的服务地址作为负载均衡结果。选择策略有轮询、根据响应时间加权、断路器(当Hystrix可用时)等。

Ribbon在工作时首选会通过ServerList来获取所有可用的服务列表,然后通过ServerListFilter过虑掉一部分地址,最后在剩下的地址中通过IRule选择出一台服务器作为最终结果。

如何在项目中快速使用Ribbon

第一步:创建服务消费者项目,并引入Ribbon的依赖

<dependency>
  <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

第二步:启动类中添加

@Bean
@LoadBalanced
RestTemplate restTemplate(){
    return new RestTemplate();
}

第三步:在需要调用服务提供方信息的地方注入RestTemplate

@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    private RestTemplate restTemplate;

    @Override
    public Object orderInfo() {
        Object result = restTemplate.getForObject("http://CONSUMER-SERIVCE/api/v1/consumer/findAll", Object.class);
        return result;
    }

    @Override
    public Object checkOrderById(Integer id) {
        Object consumerValue = restTemplate.getForObject("http://CONSUMER-SERIVCE/api/v1/consumer/findById?id=" + id, Object.class);
        return consumerValue;
    }
}

注意:
1.在restTemplate方法中,用serviceId代替真实的Ip地址+端口号,或者域名信息,其中serviceId就是服务提供方在注册中心注册的服务名
2.在使用RestTemplate过程中经常出现的一个错误就是:

使用RestTemplate时报错java.lang.IllegalStateException: No instances available for。。。

解决方案:
查看restTemplate方法中的参数,是否使用了正确的serviceId信息,记住一点和注册中心上的服务名相同就没错!!!

自定义Ribbon负载均衡策略

Ribbon默认的负载均衡策略是轮询,可以根据实际的需求进行修改
参考官网资料:
http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html#_customizing_the_ribbon_client_by_setting_properties
在这里插入图片描述
在配置文件yml里面,自定义负载均衡策略

#自定义负载均衡策略
product-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

Ribbon的理解

推荐阅读地址:
https://www.jianshu.com/p/1c02c1f8c0ff
https://blog.csdn.net/forezp/article/details/74820899

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值