SpringCloud学习笔记——Feign
SpringCloud版本:Hoxton.SR3
Springboot版本:2.2.5.RELEASE
demoGit仓库:开源在gitee中,私信索取地址
Feign是什么
前面我们聊到,Config为SpringCloud提供了外部配置的能力,Eureka则提供了服务注册与发现的能力,现在,我们来聊聊,关于服务调用的问题。事实上,Eureka本身也提供了服务调用的能力,尽管可能不太优雅,但是也能达成,并且,负载均衡,断路器等都可以实现。但是,我们可以希望一种更简单优雅的方式,于是,SpringCloud提供Feign。我们路过那些不太优雅的方式,直接从Feign开始学起。
Feign提供一种方式,可以通过注解的方式,方便的调用一个服务,就好像本地调用本地一些简单。
FeignDemo
接下来,我们提供一个Feign的简单Demo,该Demo源码开源在gitee,可私信索取地址。
Demo需要用到之前的EurekaServer,在EurekaServer的支撑下,创建两个项目,feign-demo1和feign-demo2,在demo1中,调用demo2提供的服务。在demo中,没有使用Config服务,只是为了方便,正式应用时,应该使用Config支撑的外部配置服务。
EurekaServer不需要修改,可以先启动起来。接下来,我们先来创建demo2。基于spring-cloud-base-demo创建。
在pom.xml中添加eureka-client依赖,如下:
eureka-client依赖在resources中添加application.yml,内容如下:
eureka-client和feign的依赖配置中,包含了eureka服务注册中心的地址,以及应用名称两个关键配置。
demo2已经创建完成,启动即可。接下来,创建demo1。也是基于Spring-cloud-base-demo创建。
在pom.xml添加eureka-client和feign的依赖,如下:
eureka-client和feign的依赖application.yml配置中,包含了eureka服务注册中心的地址。应用名称由于demo1是服务调用方,暂时用不上,但也推荐配置。
在Application类上添加两个注解:
EnableFeignClients和EnableDiscoveryClient。新建Demo2Interface,内容如下:
Demo2InterfaceDemo2Interface中,通过FeignClient指明了服务提供方应用的名字,通过RequestMapping注解指明了服务的具体地址。
修改HelloWorldAction,如下:
HelloWorldActionHelloWorldAction中,通过Resource注解注入了Demo2Interface,然后就可以直接调用了。
demo1创建完成,启动测试即可。
Feign的本质
从demo里,可以发现,事实上,在服务提供方demo2中,并没有任何的改动,仅仅是添加了应用名称的关键配置,而在demo1中,则添加了Feign的相关依赖和注解,并通过一个接口,配置FeignClient注解,绑定了demo2,然后,就可以直接在demo1中调用demo2提供的服务。
进一步分析demo,可以发现,demo2提供的服务实质就是demo2对外