4.OpenFeign的实现原理是什么?
在使用OpenFeign的时候,主要关心两个注解,@EnableFeignClients
和@FeignClient
。整体的流程分为以下几个部分:
- 启用Feign代理,通过在启动类上添加
@EnableFeignClients
注解,开启Feign代理对象的构建与装配功能。 - 扫描FeignClient,
@EnableFeignClients
注解中的FeignClientsRegister
会扫描所有标注了@FeignClient
注解的接口。 - 注入代理对象,对扫描到的Feign客户端接口,Spring会动态创建远程调用的代理对象,并将这些代理对象注册到Spring容器中。
- 调用远程服务,基于
RequestTemplate
生成具体的Request
实例,通过负载均衡(如Ribbon或Spring Cloud LoadBalancer)选择合适的服务实例。
在启动类上添加@EnableFeignClients注解,这个注解会扫描所有标注@FeignClient注解的接口,并创建远程代理对象,将这些代理对象添加到Spring容器中。调用远程服务时,会先基于RequestTemplate生成具体的请求实例,然后通过负载均衡器(Ribbon或者LoadBalancer)选择合适的服务实例。
5.如何实现微服务间的远程调用?
微服务间的远程调用可以分为两种,第一种采用Nacos服务注册发现,然后RestTemplate实现远程调用,这种方式比较蛮烦。第二种是采用Openfeign实现远程调用,我们不需要关注底层的实现细节。我们在项目中采用的是OpenFeign实现远程调用的,具体的实现步骤如下:
- 首先在购物车微服务中引入
OpenFeign
和loadBalancer
依赖。 - 然后,在启动类上添加
@EnableFeignClients
注解,启动OpenFeign功能。 - 最后在购物车服务中定义一个新的接口,编写Feign客户端。Feign客户端客户端只需要实现接口,不需要实现方法。在接口上添加
@FeignClient
注解,里面声明需要调用的微服务名即可。
实现微服务间的远程调用主要有两种方式,第一种是先通过Nacos服务注册发现获取到服务实例列表,然后通过RestTemplat实现远程调用。第二种方法是基于Openfeign实现远程服务调用,如果采用OpenFeign的方法就不需要关注底层的实现细节。