天天看點

Spring Cloud(2020.0.3) | 從入門到入土 - 10. OpenFeign 的使用一、訂單子產品修改二、商品子產品修改三、測試

我們就之前的例子,現在來改良一下。

一、訂單子產品修改

因為我們訂單子產品是需要調用商品子產品,是以我們需要在訂單子產品中引入 OpenFeign 的支援(商品子產品中不需要~~~)

pom

<!-- openFeign -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
           

首先引入 OpenFeign 的支援。

yml

spring:
  application:
    name: microservice-order
           

yml 中我們增加一個 spring.application.name,因為 OpenFeign 是通過這個應用名稱來進行調用服務的,雖然訂單子產品不是被調用的,但是我們要做到規範,這裡也寫上~

建立 Feign 接口

因為 Feign 是一個聲明式服務調用,是以我們需要建立一個接口,到時候直接在訂單子產品中調用直接調用我們的 Feign 接口即可。

Spring Cloud(2020.0.3) | 從入門到入土 - 10. OpenFeign 的使用一、訂單子產品修改二、商品子產品修改三、測試

這個接口的樣子最好是和我們之前調用的 Controller 中的接口樣子一樣(比如說請求類型,參數類型,方法名稱等)

光定義成這樣還不夠,我們還需要一個注解支援:@FeignClient

這個注解可以指定我們要調用那個服務,完整代碼如下:

@FeignClient(value = "microservice-commodity")
public interface CommodityOpenFeignService {

	@GetMapping("/commodity/getCommodityPrice/{id}")
	BigDecimal getCommodityPrice(@PathVariable(value = "id") String id);
}
           

value 後面就是寫的服務的名稱,也就是一會我們要配置在商品子產品的 spring.application.name

啟動類

我們在訂單子產品的啟動類上增加 Spring 對 OpenFeign 的支援

@EnableFeignClients

然後将啟動類中之前建立的 RestTemplate Bean 注釋掉或者删除掉。

業務代碼修改

因為我們将 RestTemplate 已經删掉了,是以 Controller 中引入的 RestTemplate 也可以删掉了。

接着我們引入剛剛定義好的 Feign 接口,然後我們來看一下核心代碼的修改

...
// TODO 這裡需要去查詢商品的價格,然後乘以數量,得到價錢。
// BigDecimal price = restTemplate.getForObject("http://localhost:1000/commodity/getCommodityPrice/" + commodityId, BigDecimal.class);
BigDecimal price = commodityOpenFeignService.getCommodityPrice(commodityId);
...
           

二、商品子產品修改

商品子產品修改很簡單,我們就加一個 spring.application.name 即可

spring:
  application:
    name: microservice-commodity
           

這裡的 name 要和訂單子產品 FeignClient 中的 value 相同!!!

三、測試

啟動 Eureka Server 叢集,再啟動兩個服務。

Spring Cloud(2020.0.3) | 從入門到入土 - 10. OpenFeign 的使用一、訂單子產品修改二、商品子產品修改三、測試

可以看到,目前服務是可以使用的,我們再來看一下資料庫

Spring Cloud(2020.0.3) | 從入門到入土 - 10. OpenFeign 的使用一、訂單子產品修改二、商品子產品修改三、測試
Spring Cloud(2020.0.3) | 從入門到入土 - 10. OpenFeign 的使用一、訂單子產品修改二、商品子產品修改三、測試

同樣,資料庫中也是有值的。

這一講就講到這裡,有問題可以聯系我:QQ 2100363119,歡迎大家通路我的個人網站:https://www.lemon1234.com

最近網站已經做好,并且已經上線,歡迎各位留言~~

繼續閱讀