前言 |
Spring cloud服务间调用的方式有两种:RestTemplate和FeignClient。不管是什么方式,都是通过Rest接口调用服务的http接口,参数和结果默认都是通过Jackson序列化和反序列化。因为Spring MVC的RestController定义的接口,返回的数据都是通过Jackson序列化成json数据。
目前接触的Spring cloud还是很浅显,先简单介绍一下学习到的通过feign实现Spring cloud调用的方法。
feign实现服务间调用 |
举个栗子:被调用的服务为kernel,调用的服务为zentao
1、创建api模块
需要在kernel服务创建一个integral-kernel-api的模块,如图:
模块中包括facade和model
facade是暴露给需要调用服务的接口,model里面存放的是需要用到的实体数据(注意这里的实体数据不要和自己服务的实体完全一样,因为这些实体也是可以暴露给别人的,所以要注意安全性)
2、integral-kernel-api中配置接口方法
@FeignClient(value = "INTEGRAL-KERNEL-PROVIDER", path = "/kernel-web")
public interface IntegralClientService {
@PostMapping(value = {"/integral/addIntegral"})
IntegralResult<IntegralModel> addIntegral(@RequestBody IntegralModel model);
}
代码解释:
3、将api推送到私服上
使用maven命令或者是按照如图操作均可,原理是相同的
4、调用服务引入坐标
需要在zentao的provider的pom.xml文件中引用相应的坐标
<dependency>
<artifactId>integral-kernel-api</artifactId>
<groupId>com.dmsdbj.cloud</groupId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
当把api的jar包推送到私服上之后,kernel的api方法就可以以jar包的形式让zentao引入了并且使用了。
5、调用服务添加包扫描
需要在zentao的启动类上加上扫描包的注解如下:
/调用其他服务包扫描
@EnableFeignClients(basePackages = {"com.dmsdbj.integral.kernel.api"})
添加上包扫描的方法之后,zentao启动的时候就可以扫描并且访问到kernel的代码,所以需要的时候就可以调用kernel的方法了
6、使用kernel的方法
在需要调用其他服务的类的service实现类先声明接口
@Resource
private IntegralClientService integralClientService;
在需要用的地方直接使用即可:
ntegralResult<IntegralModel> result = integralClientService.addIntegral(item);
总结 |
这样使用feign进行服务间的调用就完成啦!