(二)SpringCloud-Alibaba-OpenFeign遠端服務呼叫
阿新 • • 發佈:2022-03-25
使用OpenFeign作為遠端服務呼叫
1. Feign介紹
通過RestTemplate呼叫其它服務的API時,所需要的引數須在請求的URL中進行拼接,如果引數少的話或許我們還可以忍受,一旦有多個引數的話,這時拼接請求字串就會效率低下
Feign是一個宣告式的Web Service客戶端,它的目的就是讓Web Service呼叫更加簡單。Feign提供了HTTP請求的模板,通過編寫簡單的介面和插入註解,就可以定義好HTTP請求的引數、格式、地址等資訊。
而Feign則會完全代理HTTP請求,我們只需要像呼叫方法一樣呼叫它就可以完成服務請求及相關處理。Feign整合了Ribbon負載均衡
Feign具有如下特性:
支援可插拔的HTTP編碼器和解碼器;
支援Hystrix和它的Fallback;
支援Ribbon的負載均衡;
支援HTTP請求和響應的壓縮。
有點像我們springmvc模式的Controller層的RequestMapping對映。這Feign是用@FeignClient來對映服務的。
2. Feign的使用
實現案例:在會員服務中通過nacos服務註冊中心遠端呼叫優惠券服務
2.1、引入open-feign
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2.2、編寫一個介面,告訴springCloud這個介面需要遠端呼叫
1)、在優惠券服務中編寫如下介面服務:
@RequestMapping("/member/list") public R memberCoupons(){ CouponEntity coupon = new CouponEntity(); coupon.setCouponName("滿1000減200"); return R.ok().put("coupons",Arrays.asList(coupon)); }
2.3、在會員模組中新建feign檔案包,建立CouponFeignService介面:優惠券遠端呼叫服務。
1)、介面服務使用註解@FeignClient,註解中的值為nacos中微服務的名稱,用於服務發現
2)、宣告介面的每一個方法都是呼叫某個服務的請求
注意:RequestMapping中的請求路徑為該服務的全路徑
@FeignClient("ttmall-coupon") public interface CouponFeignService { @RequestMapping("/coupon/coupon/member/list") public R memberCoupons(); }
2.4、在會員模組中的啟動類開啟遠端呼叫功能 @EnableFeignClients
basePackages中值為feign包的路徑
@EnableFeignClients(basePackages="com.agentliu.ttmall.member.feign")
2.5、在會員模組中編寫測試類呼叫會員服務的遠端服務
@Autowired CouponFeignService couponFeignService; @RequestMapping("/coupons") public R getMemberCoupon(){ MemberEntity memberEntity = new MemberEntity(); memberEntity.setUsername("張三"); R coupon = couponFeignService.memberCoupons(); return R.ok().put("member",memberEntity).put("coupon",coupon.get("coupons")); }
2.6、啟動會員服務、優惠券服務,在瀏覽器中請求剛才編寫的會員測試方法
http://localhost:8000/member/member/coupons