1. 程式人生 > 其它 >(二)SpringCloud-Alibaba-OpenFeign遠端服務呼叫

(二)SpringCloud-Alibaba-OpenFeign遠端服務呼叫

使用OpenFeign作為遠端服務呼叫

1. Feign介紹

  通過RestTemplate呼叫其它服務的API時,所需要的引數須在請求的URL中進行拼接,如果引數少的話或許我們還可以忍受,一旦有多個引數的話,這時拼接請求字串就會效率低下

  Feign是一個宣告式的Web Service客戶端,它的目的就是讓Web Service呼叫更加簡單。Feign提供了HTTP請求的模板,通過編寫簡單的介面和插入註解,就可以定義好HTTP請求的引數、格式、地址等資訊。

  而Feign則會完全代理HTTP請求,我們只需要像呼叫方法一樣呼叫它就可以完成服務請求及相關處理。Feign整合了Ribbon負載均衡

Hystrix服務熔斷,可以讓我們不再需要顯式地使用這兩個元件。

 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