SpringCloud Feign聲明式遠程調用

 

1. Feign聲明式遠程調用

1. 簡介

Feign是一個聲明式的HTTP客戶端,它的目的就是讓遠程調用更加簡單。Feign 提供了HTTP請求的模板,通過編寫簡單的接口和插入註解,就可以定義好HTTP請求的參數、格式、地址等信息。
Feign 整合了Ribbon(負載均衡)和Hystrix(服務熔斷),可以讓我們不再需要顯式地使用這兩個組件。
SpripgCloudFeign 在NetflixFeign的基礎上擴展了對SpringMVc註解的支持,在其實現下,我們只需創建一個接口並用往解的方式來配置它,即可完成對服務提供方的接口綁定。簡化了SpringcloudRibbon 自行封裝服務調用客戶端的開發量。

2. 使用

2.1 引入依賴

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

2.2 開啓feign功能

@EnableFeignClients(basePackages = "com.zx.zxmall.member.feign")

package com.zx.zxmall.member;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * 想要遠程調用別的服務
 * 1. 引入open-feign
 * 2. 編寫一個接口,告訴springcloud 這個接口需要調用遠程服務
 *     1.聲明接口的每一個方法都是調用哪個遠程服務的那個請求
 * 3. 開啓遠程調用的功能 @EnableFeignClients
 */
@EnableFeignClients(basePackages = "com.zx.zxmall.member.feign")
@EnableDiscoveryClient
@SpringBootApplication
public class ZxmallMemberApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZxmallMemberApplication.class, args);
    }

}

2.3 聲明遠程接口

package com.zx.zxmall.member.feign;

import com.zx.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

//這是一個聲明式的遠程調用
@FeignClient("zxmall-coupon")
public interface CouponFeignService {

    @RequestMapping("/coupon/coupon/member/list")
    public R membercoupons();
}
@RestController
@RequestMapping("member/member")
public class MemberController {
    @Autowired
    private MemberService memberService;

    @Autowired
    CouponFeignService couponFeignService;

    @RequestMapping("/coupons")
    public R test(){
        MemberEntity memberEntity = new MemberEntity();
        memberEntity.setNickname("abc");

        R membercoupons = couponFeignService.membercoupons();
        return R.ok().put("member",memberEntity).put("coupons",membercoupons.get("coupons"));
    }
}
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
    @Autowired
    private CouponService couponService;

    @RequestMapping("/member/list")
    public R membercoupons(){
        CouponEntity couponEntity = new CouponEntity();
        couponEntity.setCouponName("滿100-10");
        return R.ok().put("coupons",Arrays.asList(couponEntity));
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章