Loading

01_Feign介绍

RPC概述:

RPC 全称是 Remote Procedure Call ,即远程过程调用,其对应的是我们的本地调用。
RPC 的目的是:让我们调用远程方法像调用本地方法一样。
//本地调用
R result = orderService.findOrderByUserId(id);
//RPC远程调用 orderService为代理对象
R result = orderService.findOrderByUserId(id)

RPC框架设计架构:

什么是Feign:

Feign是Netflix开发的声明式、模板化的HTTP客户端,Feign可帮助我们更加便捷、优雅地调用HTTP API。
Feign可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。它像 Dubbo 一样,consumer 直接调用接口方法调用 provider,而不需要通过常规的 Http Client 构造请求再解析返回数据。它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。
Spring Cloud openfeign对Feign进行了增强,使其支持Spring MVC注解,另外还整合了Ribbon和Eureka,从而使得Feign的使用更加方便。 

Ribbon&Feign对比:

Ribbon+RestTemplate进行微服务调用 
    @RequestMapping(value = "/findOrderByUserId/{id}")
    public R findOrderByUserId(@PathVariable("id") Integer id) {
        log.info("根据userId:" + id + "查询订单信息");
        // ribbon实现,restTemplate需要添加@LoadBalanced注解
        String url = "http://mall-order/order/findOrderByUserId/" + id;
        return restTemplate.getForObject(url, R.class);
    }
Feign进行微服务调用
实现feign接口:
@FeignClient(value = "mall-order", path = "/order")
public interface OrderFeignService {
    
    @RequestMapping("/findOrderByUserId/{userId}")
    R findOrderByUserId(@PathVariable("userId") Integer userId);
}

使用feign进行调用:

    @Autowired
    OrderFeignService orderFeignService;

    @RequestMapping(value = "/findOrderByUserId/{id}")
    public R findOrderByUserId(@PathVariable("id") Integer id) {
        //feign调用
        return orderFeignService.findOrderByUserId(id);
    }

Feign的设计架构

 

posted @ 2023-04-23 23:56  1640808365  阅读(26)  评论(0编辑  收藏  举报