当前位置:网站首页>Ribbon和Feign的对比-带简易例子

Ribbon和Feign的对比-带简易例子

2022-06-09 04:57:00 是在下了

Ribbon和Feign的对比

Ribbon和Feign都是SpringCloud中的基于 HTTP 和 TCP 客户端 的软负载均衡的工具。
Feign 是在 Ribbon的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端。
采用接口的方式, 只需要创建一个接口,然后在上面添加注解即可 ,将需要调用的其他服务的方法定义成抽象方法即可, 不需要自己构建http请求。
两者要实现负载均衡都需要依托于eureka注册中心但也可以不借助注册中心,这种方式还没有尝试过。

由一个简单的例子来说明

整体项目结构

eureka-server(注册中心)
eureka-service-b(服务提供者B)
eureka-service-b-api(服务提供者B标准API和基础POJO)
feign-client-demo(服务调用者-Feign方式)
ribbon-client-demo(服务调用者-Ribbon方式)

通过Ribbon,A来调用B的服务

服务提供者B中书写简易示例:

服务提供者不需要做额外配置,正常书写暴露API请求即可

服务调用者A中调用B的示例代码:

关键部分代码
TestController.java

@RestController
public class TestController {
    

    @Autowired
    private RestTemplate restTemplate;

    private static final String REST_URL_PREFIX = "http://EUREKA-SERVICE-B";

    @GetMapping("/ribbon/test")
    public List<Test> listTest(@RequestParam("id") String id){
    
        ParameterizedTypeReference<List<Test>> typeReference = new ParameterizedTypeReference<List<Test>>() {
    
        };
        return restTemplate.exchange(REST_URL_PREFIX+"/tests?id="+id, HttpMethod.GET,null,typeReference).getBody();
    }
}

Config.java

@Configuration
public class Config {
    

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

通过Feign,A来调用B的服务

服务提供者B中书写简易示例:

服务提供者需要对eureka-service-b-api中新增ServiceFeignClient.java

@FeignClient(value = "EUREKA-SERVICE-B")
public interface ServiceFeignClient {
    

    @GetMapping("/tests")
    List<Test> listTest(@RequestParam("id") String id);
}

服务调用者A中调用B的示例代码:

关键部分代码
TestController.java

@RestController
public class TestController {
    

    @Autowired
    private ServiceFeignClient serviceFeignClient;

    @GetMapping("/feign/test")
    public List<Test> listTest(@RequestParam("id") String id){
    
        return serviceFeignClient.listTest(id);
    }
}

总结

从上面来看吧,功能都一样,看代码量的话也差不多,区别就在于,ribbion的方式,服务调用者和服务提供者需要通过接口文档进行沟通交流。
feign的方式的话,接口文档可以省了。

工程项目源码

https://gitee.com/eyesopen/feign-and-ribbion-test

原网站

版权声明
本文为[是在下了]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_33121481/article/details/109605627