Spring cloud服务间调用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Sunny5319/article/details/82319587
前言

      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进行服务间的调用就完成啦!

猜你喜欢

转载自blog.csdn.net/Sunny5319/article/details/82319587