1. 程式人生 > >Spring cloud服務間呼叫

Spring cloud服務間呼叫

前言

      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進行服務間的呼叫就完成啦!