SpringCloud之Ribbon组件

SpringCloud之Ribbon组件

** ribbon组件的作用是做client的负载均衡,需配合RestTemplate完成服务间通信**。
** 使用方式有3中:DiscoverClient、LoadBancerClient、@LoadBalanced**

1.使用DiscoverClient(文中所有代码均是,用户服务调用订单服务)
List<ServiceInstance> orders = discoveryClient.getInstances("order");
String result=restTemplate.getForObject(orders.get(0).getUri()+"/order/test",String.class);

discoveryClient.getInstances(“order”),会在服务注册中心拉取服务名为order的服务列表到本地,并做缓存。DiscoverClient没有负载均衡。

2.使用LoadBancerClient
ServiceInstance order = loadBalancerClient.choose("order"); 
String result = restTemplate.getForObject(order.getUri() + "/order/test", String.class);

ServiceInstance order = loadBalancerClient.choose(“order”); 这里是LoadBancerClient拉取名为order的服务列表并采用choose方法做负载均衡(默认是轮询)

3.使用@LoadBalanced

这种方式是通过把RestTemplate写入到IOC容器中:

@Configuration
public class RestTemplteConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

@LoadBalanced作用在配置类的方法上,其目的就是对RestTemplate进行加强。在需要用到的地方进行注入RestTemplate就行了

    @Autowired
    private RestTemplate restTemplate;

使用时如下:

String result=restTemplate.getForObject("http://order/test",String.class);

原先的RestTemplate是这样调用的:

String result=restTemplate.getForObject("http://localhost:8989/test",String.class);

使用@LoadBalanced之后的,是将localhost:8989替换为你要调用的服务名,我这里要调用的就是order。他会根据order去注册中心拉取order列表,并进行负载均衡选择出一个服务然后将地址中的order替换掉,最后组成一个完整的url。

使用Ribbon+RestTemplate的缺点

使用Ribbon+RestTemplate,会将服务间的调用“写死”,有100个服务调用,这段代码就要写100次。这里你可能会像那我把他封装成一个方法不就好了嘛。这样做确实不错,但是一个方法只能对应两个服务之间的调用,那我某个服务调用了另外100个服务岂不是要写100个方法?最好的办法是使用openfeign组件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为了我的架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值