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