javascript
Spring Cloud 入门 之 Feign 篇(三)
一、前言
在上一篇文章《Spring Cloud 入門 之 Ribbon 篇(二)》?中介紹了 Ribbon 使用負(fù)載均衡調(diào)用微服務(wù),但存在一個(gè)問(wèn)題:消費(fèi)端每個(gè)請(qǐng)求方法中都需要拼接請(qǐng)求服務(wù)的 URL 地址,存在硬編碼問(wèn)題且不符合面向?qū)ο缶幊趟枷搿H绻?wù)名稱發(fā)生變化,消費(fèi)端也需要跟著修改。
本篇文章將介紹 Feign 來(lái)解決上邊的問(wèn)題。
二、簡(jiǎn)單介紹
Feign 是一個(gè)聲明式的 Web Service 客戶端。使用 Feign 能讓編寫 Web Service 客戶端更加簡(jiǎn)單,同時(shí)支持與Eureka、Ribbon 組合使用以支持負(fù)載均衡。
Spring Cloud 對(duì) Feign 進(jìn)行了封裝,使其支持了 Spring MVC 標(biāo)準(zhǔn)注解和 HttpMessageConverters。
Feign 的使用方法是定義一個(gè)接口,然后在其上邊添加 @FeignClient 注解。
三、實(shí)戰(zhàn)演練
本次測(cè)試案例基于之前發(fā)表的文章中介紹的案例進(jìn)行演示,不清楚的讀者請(qǐng)先轉(zhuǎn)移至?《Spring Cloud 入門 之 Ribbon 篇(二)》?進(jìn)行瀏覽。
#?3.1 添加依賴
在 common-api 和 order-server 項(xiàng)目中添加依賴:
<!-- feign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>#?3.2 定義新接口
在 common-api 中項(xiàng)目中新建一個(gè)接口:
@FeignClient(value="GOODS") public interface GoodsServiceClient {@RequestMapping("/goods/goodsInfo/{goodsId}") public Result goodsInfo(@PathVariable("goodsId") String goodsId); }使用?@FeignClient?注解指定調(diào)用的微服務(wù)名稱,封裝了調(diào)用 USER-API 的過(guò)程,作為消費(fèi)方調(diào)用模板。
注意:Feign 接口的定義最好與對(duì)外開(kāi)發(fā)的 controller 中的方法定義一致,此處的定義與 goods-server 項(xiàng)目中 controller 類定義的方法一致。
#?3.3 修改調(diào)用
在 order-server 項(xiàng)目中,使用 GoodsServiceClient 獲取商品信息:
@Service public class OrderServiceImpl implements OrderService{// @Autowired // private RestTemplate restTemplate;@Autowired private GoodsServiceClient goodsServiceClient;@Override public void placeOrder(Order order) throws Exception{//Result result = this.restTemplate.getForObject("http://GOODS/goods/goodsInfo/" + order.getGoodsId(), Result.class);Result result = this.goodsServiceClient.goodsInfo(order.getGoodsId());if (result != null && result.getCode() == 200) { System.out.println("=====下訂單===="); System.out.println(result.getData()); } }}直接使用 Feign 封裝模板調(diào)用服務(wù)方,免去麻煩的 URL 拼接問(wèn)題,從而實(shí)現(xiàn)面向?qū)ο缶幊獭?/p>
#?3.4 啟動(dòng) Feign 功能
在啟動(dòng)類上添加?@EnableEeignClients?注解:
@EnableFeignClients(basePackages = {"com.extlight.springcloud"}) @EnableEurekaClient @SpringBootApplication public class OrderServerApplication {public static void main(String[] args) { SpringApplication.run(OrderServerApplication.class, args); } }由于 order-server 項(xiàng)目中引用了 common-api 中的 GoodsServiceClient,不同屬一個(gè)項(xiàng)目,為了實(shí)例化對(duì)象,因此需要在 @EnableFeignClients 注解中添加需要掃描的包路徑。
使用 Postman 請(qǐng)求訂單系統(tǒng),請(qǐng)求結(jié)果如下圖:
請(qǐng)求成功,由于 Feign 封裝了 Ribbon,也就實(shí)現(xiàn)了負(fù)載均衡的功能。
四、案例源碼
Feign demo 源碼
總結(jié)
以上是生活随笔為你收集整理的Spring Cloud 入门 之 Feign 篇(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: poj 1935(搜索+回溯)
- 下一篇: poj 1948(搜索+剪枝)