对eureka,ribbon,feign和负载均衡的理解

以下是个人理解,仅供参考

eureka获取ip和端口的方法

    @GetMapping("test")
    public String Test(String serverName){
        List<ServiceInstance> instances = discoveryClient.getInstances(serverName);
        ServiceInstance serviceInstance = instances.get(0);
        String ip = serviceInstance.getHost();
        int port = serviceInstance.getPort();
        System.out.println(ip+port);
        return ip+port;
    }
有了ip和端口就可以通过RestTemplate类访问对应的服务了

ribbon做了什么?

    @Bean
    @LoadBalanced
    public RestTemplate RestTemplate(){
        return new RestTemplate();
    }
    @GetMapping("test")
    public String A(String serverName){
        String str = restTemplate.getForObject("http://" + serverName+ "/hello", String.class);
        return str;
    }
可以看到只需要为RestTemplate类加入@LoadBalanced注解,就可以用eureka中的application名称代替写死的端口和ip
其实ribbon在底层代理了RestTemplate类,它会拦截你的请求分析出请求中的serverName,在底层通过discoveryClient类和serverName获得eureka中对应application的instance列表,并且以指定的方式进行负载均衡

ribbon的作用在此可以看出是一个承上启下的角色,它的上面是eureka,它的下面是负载均衡.

feign做了什么?

@FeignClient(value = "user-server")
public interface UserOrderFeign {
    @GetMapping("order")
    String order();
}

feign的代码很简单,在接口上加入注解vaue是eureka中的appliction名称,接口中则是服务提供则的方法原型,这样就可以发起远程调用了,这种操作方式极大的简化了开发.

feign修饰的是一个接口,接口不能做事做事的是对象,很容易想到,feign用了动态代理在底层实现了该接口的对象.在代理的底层,feign首先找到被注解修饰的接口,拿到它上面@FeignClient注解中的vuele,这个value是eureka的applicaton名称,通过这一步feign借助ribbon可以找到eureka中的服务实例,即拿到了同一application服务的instance集合同时也算知道了ip+端口的集合.
接口中的方法注解@GetMapping(“order”)则告知了我们服务的api,这样feign就可以实现负载均衡的远程调用了.

例子:
1.feign通过@FeignClient(value = “user-server”)得到了eureka中的服务

8081和8082是eureka中application名称为user-server的2个instance
2.@GetMapping(“order”)为我们提供了访问该实例的api,feign底层封装的ribbon让我们负载均衡的访问8081和8082.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值