微服务的各组件间的通讯其实方式有很多。
我们可以按照同步和异步来做一个简单的区分:
同步:RPC,REST等。
异步:消息队列。要考虑消息可靠传输、高性能,以及编程模型的变化等。
Feign是spring cloud中服务消费端的调用框架,通常与ribbon,hystrix等组合使用,一般是用来做微服务间的rest方式通讯的组件。
当然,在一般rest的微服务架构中,Feign是可以脱离spring cloud单独使用的。毕竟它只是作为一个服务消费端的一个调用框架,其中主要的工作只是简化了微服务中的网络请求一方面的工作。
当然,feign在spring cloud中也是可以被取代的,类似于HttpClient,OkHttp,Spring中的RestTemplate等等。不过feign在配置化,轻量化,方面优势相比前面几种优势明显,加上它结合spring cloud体系,可以达到很好的微服务内部负载均衡,所以这里推荐使用feign。
这里举个简单的栗子:
假设我们有两个服务:
一个是微服务中的服务提供方,它提供了用户鉴权的操作;一个是微服务中的服务消费方,它对外(web)暴露web接口,内部调用服务提供方的接口来达到用户鉴权的目的。
这里可以看到,在消费方的业务层,我们需要发起网络请求来获取服务提供方的数据。
假设服务提供方的定义为:
@PostMapping(value = "/auth")
public Boolean auth(@RequestParam("mobilePhone") String mobilePhone,@RequestParam("password") String password){
...
}
服务地址为/auth,接收mobilePhone和password参数,响应结果为当前鉴权结果:true或者false。
如果使用feign的话,这里的服务调用可以简化为:
@FeignClient
public interface AuthFeignClient{
@RequestMapping(value = "/auth", method = RequestMethod.GET)
boolean auth(@RequestParam("mobilePhone") String mobilePhone, @RequestParam("password") String password);
}
这里简单描述下feign,最近比较忙,后续有时间会再写一些feign相关的记录。