目录
传送门
服务间调用
集成OpenFeign
说明文档
添加pom依赖
启用OpenFeign
声明OpenFeign接口
改造远程调用
定义OpenFeign接口
测试OpenFeign调用
传送门
Spring Cloud Alibaba系列之nacos:(1)安装
Spring Cloud Alibaba系列之nacos:(2)单机模式支持mysql
Spring Cloud Alibaba系列之nacos:(3)服务注册发现
服务间调用
集成OpenFeign
说明文档
Spring Cloud OpenFeign
可以按照上面的集成指南亦步亦趋,跟着集成就行了
添加pom依赖
官方文档给出了对应的pom坐标
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
启用OpenFeign
在SpringBoot的启动类上面,添加注解@EnableFeignClients
声明OpenFeign接口
改造远程调用
在之前集成nacos的时候,为了测试nacos的注册发现,在auth服务上面声明了一个Controller,定义了一个方法
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str)
{
return restTemplate.getForObject("http://cipher-service/echo/" + str, String.class);
}
通过RestTemplate调用了cipher服务的接口,现在把这个接口改造成OpenFeign调用。虽然RestTemplate封装了Http的远程调用,但是使用它还是有一些模板化的代码,比如restTemplate.getForObject(url,参数,响应)这种。而OpenFeign更进一步,通过代码将这种类似的模板代码也消除了,使开发人员用起来就哪面对对象的本地调用一样方便
定义OpenFeign接口
针对要高用的接口,首先创建一个接口,比如命令为AuthFeignClient。然后在接口上面打上注解@FeignClient,其中FeignClient表明这是一个OpenFeign接口,里面至少要定义属性"name",对应的所要调用的服务的名称,现在是auth调用cipher,那么name就是cipher服务的名称"cipher-service"
public class FeignConstant {
public static final String CIPHER_SERVICE = "cipher-service";
}
@FeignClient(name = FeignConstant.CIPHER_SERVICE)
public interface AuthFeignClient
{
}
这一步完成了,那么,对于远程方法的调用,就跟传统的SpringMvc没有区别了。现在定义一下原来cipher的接口调用
@FeignClient(name = FeignConstant.CIPHER_SERVICE)
public interface AuthFeignClient
{
@GetMapping(value = "/echo/{str}")
String echo(@PathVariable("str") String str);
}
测试OpenFeign调用
OpenFeign接口调用定义完成之后,现在来测试调用一下
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str)
{
// 原来的restTemplate调用
// return restTemplate.getForObject("http://cipher-service/echo/" + str, String.class);
// OpenFeign调用
return feignClient.echo(str);
}
浏览器请求一下,http://localhost:8080/echo/ssss,返回Hello Nacos Discovery ssss,表明调用成功
在下一节,会介绍一下OpenFeign的其它配置及一些通用实践