亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[Spring cloud 一步步實現廣告系統] 11. 使用Feign實現微服務調用

發布時間:2020-06-21 11:58:07 來源:網絡 閱讀:403 作者:zhangpan0614 欄目:編程語言

上一節我們使用了Ribbon(基于Http/Tcp)進行微服務的調用,Ribbon的調用比較簡單,通過Ribbon組件對請求的服務進行攔截,通過Eureka Server 獲取到服務實例的IP:Port,然后再去調用API。本節課我們使用更簡單的方式來實現,使用聲明式的Web服務客戶端Feign,我們只需要使用Feign來聲明接口,利用注解來進行配置就可以使用了,是不是很簡單?實際工作中,我們也只會用到Feign來進行服務之間的調用(大多數)。接下來,我們來實例操作一把。

為了代碼的重用性,我們來創建一個新的project mscx-ad-feign-sdk作為Feign的服務調用工具。

  • 創建項目mscx-ad-feign-sdk
  • 三部曲之Step 1(加依賴)

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>mscx-ad</artifactId>
        <groupId>com.sxzhongf</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>jar</packaging>
    <name>mscx-ad-feign-sdk</name>
    <description>只定義微服務Feign調用用到的請求對象和響應對象,而不涉及具體的實現類。</description>
    
    <groupId>com.sxzhongf</groupId>
    <artifactId>mscx-ad-feign-sdk</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 引入服務調用的組件 feign 依賴-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>com.sxzhongf</groupId>
            <artifactId>mscx-ad-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- 引入系統容錯hystrix 的依賴-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.2.7.RELEASE</version>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    </project>
  • 三部曲之Step 2(加注解@EnableFeignClients,添加在具體的微服務中,使用我們自定義的FeignClient)

    
    /**
    * ISponsorFeignClient for service using
    *
    * @author <a href="mailto:magicianisaac@gmail.com">Isaac.Zhang | 若初</a>
    */
    @FeignClient(value = "mscx-ad-sponsor", fallback = SponsorClientHystrix.class)
    public interface ISponsorFeignClient {
    @RequestMapping(value = "/ad-sponsor/plan/get", method = RequestMethod.POST)
    CommonResponse<List<AdPlanVO>> getAdPlansUseFeign(@RequestBody AdPlanGetRequestVO requestVO);
    
    @RequestMapping(value = "/ad-sponsor/user/get", method = RequestMethod.GET)
    /**
     * Feign 埋坑之 如果是Get請求,必須在所有參數前添加{@link RequestParam},不能使用{@link Param}
     * 會被自動轉發為POST請求。
     */
    CommonResponse getUsers(@RequestParam(value = "username") String username);
    }

@RestController@Slf4j
br/>@Slf4j
public class SearchFeignController {
/**

  • 注入我們自定義的FeignClient
    */
    private final ISponsorFeignClient sponsorFeignClient;@Autowired
    br/>@Autowired
    this.sponsorFeignClient = sponsorFeignClient;
    }

    @GetMapping(path = "/user/get")
    public CommonResponse getUsers(@Param(value = "username") String username) {
    log.info("ad-search::getUsersFeign -> {}", JSON.toJSONString(username));
    CommonResponse commonResponse = sponsorFeignClient.getUsers(username);
    return commonResponse;
    }
    }

  • 三部曲之Step 3(加配置,工具類庫不需要,添加在具體的微服務中)

我們上面的實例中有一個問題,如果說我們的廣告提供服務出現了問題,那么我們通過使用FeignClient 調用的APIsponsorFeignClient.getUsers(username);就會報錯,如果長時間報錯,會引起大規模的服務錯誤問題,也就有是我們常說的服務雪崩效應,我們要怎樣避免一個服務出錯而拖垮整個系統的問題呢?這里我們需要引入一個組件Hystrix來處理服務錯誤。

  • 三部曲之Step1(加依賴)
    [Spring cloud 一步步實現廣告系統] 11. 使用Feign實現微服務調用

從上圖我們可以看到,我們引入Feign依賴的時候,它本身已經依賴了Hystrix,根據Maven依賴的傳遞性,我們可以知道我們自己的服務已經包含了Hystrix的依賴支持,我們可以直接使用了~

  • 三部曲之Step2(加注解) @EnableHystrix // 開啟hystrix 斷路器
  • 三部曲之Step3(改配置)

    feign:
    hystrix:
    enabled: true
  • 使用Hystrix來配置Feign實現調用容錯

    @Component
    public class SponsorClientHystrix implements ISponsorFeignClient {
    @Override
    public CommonResponse<List<AdPlanVO>> getAdPlansUseFeign(AdPlanGetRequestVO requestVO) {
        return new CommonResponse<>(-1, "mscx-ad-sponsor feign & hystrix get plan error.");
    }
    
    @Override
    public CommonResponse getUsers(String username) {
        return new CommonResponse<>(-1, "mscx-ad-sponsor feign & hystrix get user error.");
    }
    }

ISponsorFeignClient類中,添加出錯處理類(fallback)

@FeignClient(value = "mscx-ad-sponsor", fallback = SponsorClientHystrix.class)
public interface ISponsorFeignClient {
...

SponsorClientHystrix中,我們要特別注意2點

  1. 該類必須添加@Component注解,以便可以加入Spring 容器中
  2. 該類需要實現ISponsorFeignClientFeign的客戶端接口

通過上面的實現,我們的服務在調用過程中,如果發生錯誤,就會進行服務降級,調用到出錯應該調用的默認處理類中的方法,也就實現了我們想要做的短路處理來保護我們的當前服務。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临夏市| 堆龙德庆县| 长春市| 攀枝花市| 富宁县| 邻水| 临沭县| 宁波市| 太原市| 石嘴山市| 揭阳市| 苏尼特右旗| 无为县| 北票市| 南投市| 莱芜市| 延安市| 图们市| 留坝县| 新疆| 南靖县| 惠州市| 庆城县| 灯塔市| 确山县| 林芝县| 盈江县| 车险| 乌鲁木齐县| 肃宁县| 逊克县| 故城县| 兴义市| 北海市| 永安市| 开原市| 清水县| 双桥区| 包头市| 溆浦县| 吉林市|