openfeign远程调用在微服务结构中如何使用
OpenFeign是Spring cloud自己研发的二代负载均衡客户端,与feign一样都内置了Ribbon,在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等,OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
使用案例
假如当前有一个springcloud环境,不同单体服务之间有可能有需要调用其他服务的接口来获取数据,执行业务。这个时候如何正确准确的访问你想获取数据的对应的服务呢,在这个场景下就可以使用openfeign。
例如:
A,B,C 服务处于同一个springcloud环境下,A需要获取B服务中的相关数据才能完善当前业务。这个过程应该如何配置才能使用呢,
在这个过程中,A是需要获取数据的服务,B是提供数据的服务,B需要提供完整的openfeign配置供其他单体服务调用提供的接口服务。
远程调用中提供服务(BService)
例如:
这是提供openfeign服务的配置,需要在接口上添加@FeignClient()注解并配置path路径,name服务名(为配置在该springcloud环境下注册的服务名),
远程调用中获取数据(AService)
那么提供服务有了,如何在springcloud下面作为获取数据的服务使用openfeign来调用其他服务呢。由于B服务在提供openfeign的时候使用的@FeignClient本身就会被spring容器代理,在需要使用的时候,只需要引入对应服务的依赖Bservice然后直接注入该interface,然后就可以直接调用提供的远程调用方法,这样只能访问Bservice想暴露出来被远程调用的接口,在一定程度上也增加了服务的安全性。
例如:
这就是一个完整的为服务间使用openfeign实现跨服务通信的一个简单例子了。