springCloud Finchley 實戰(zhàn)入門(基于springBoot 2.0.3)【七 Fegin 聲明式服務調用】

Fegin 介紹

spring cloud fegin ,他是基于Netflix Fegin實現(xiàn)得,整合了spring cloud Ribbon和spring cloud Hystrix,除了整合這兩者得功能外,他還提供了了一種聲明式得Web服務客戶端定義方式。

快速入門

創(chuàng)建一個spring boot項目命名為"eureka-bussniss-service-user-client-fegin",選擇server和fegin的依賴;


1532587428278.png

application.yml相關配置:

spring:
  application:
    name: service-user-client-fegin
server:
  port: 9001
eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka/
feign:
  hystrix:
    enabled: true

項目主類EurekaBussnissServiceUserClientFeginApplication,添加@EnableEurekaClient和@EnableFeignClients注解

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class EurekaBussnissServiceUserClientFeginApplication {

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

我們以eureka-bussniss-service-user的服務例。在fegin項目中定義一個接口"UserFeignClient"

/**
 * 標明feign調用的微服務名稱
 */
//通過@ FeignClient(“服務名”),來指定調用哪個服務。
// 比如在代碼中調用了service-hi服務的“/hi”接口,還可以使用url參數(shù)指定一個URL
// fallback  出現(xiàn)錯誤回調類
@FeignClient(name = "service-user",fallback = UserFallback.class)
public interface UserFeignClient {

    /**
     * 對應service-user微服務中的URL
     * @return
     */
    @GetMapping("/listUsers")
    String listUsers();

}

接著,創(chuàng)建一個Controller來實現(xiàn)對Fegin客戶端的調用,使用@Autowired自動注入上面的“UserFeignClient ”實例。并且通過方法實現(xiàn)對service-user的服務發(fā)起調用。

@RestController
public class UserFeignApi {
    /**
     * 將剛才定義的userFeignClient注入,并當成普通的接口調用即可
     */
    @Autowired
    private UserFeignClient userFeignClient;

    @GetMapping("/listUsersByFeign")
    public String ListUsers(){
        String users = this.userFeignClient.listUsers();
        return users;
    }
}

方式測試fegin的負載均衡以及服務容錯保護的功能,我們創(chuàng)建了一個UserFallback實現(xiàn)UserFeignClient。實現(xiàn)接口請求錯誤的反饋

@Component
public class UserFallback implements UserFeignClient {
    @Override
    public String listUsers() {
        return "服務調用失敗";
    }
}

包路徑截圖


1532588267196.png

到這里就已經(jīng)基本完成了,依次啟動service-user(8802,8803兩個端口)、fegin。


1532588691914.png

訪問fegin項目的地址http://localhost:9001/listUsersByFeign

1532588711363.png

1532588720488.png

重復請求,會發(fā)現(xiàn)接口數(shù)據(jù)是依次返回8802和8803的數(shù)據(jù)的。

現(xiàn)在把其中一個service-user服務停掉(8803),一開始當請求負載到8803這個服務實例時,因為當前的服務已經(jīng)停掉了,所以接口響應顯示了我們實現(xiàn)了UserFallback 類的返回。


1532588846177.png

再過幾秒鐘后,我們繼續(xù)請求會發(fā)現(xiàn),接口已經(jīng)全部負載到了8802的服務實例了。


1532588992210.png

所以可以看到fegin已經(jīng)實現(xiàn)了Ribbon和Hystrix的功能了。

github 項目源碼

下一篇我們將實現(xiàn)spring cloud config分布式配置中心的組件。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容