Spring-Cloud(二)—— 聲明式REST客戶端Feign

在微服務架構中,feign是比較好用的一種服務提供接口的調用方式,它使編寫Web服務客戶端更加容易;並且在使用Feign的同時,它還集成了Ribbon用以完成接口調用的負載均衡。

簡單實現:

服務提供端:

接下來就是具體實現一個Feign接口了,我個人比較傾向於如下實現方式

可以看下項目骨架。

接口都是寫在user-server-api中。而具體實現是放在user-server-provider

/**
 *
 * @author DKing/Chenxiaorui
 * @description
 * @date 2020/3/27
 *
 */
@RequestMapping("/user-server-api")
public interface UserServerApi {
}

個人覺得這樣寫是比較好的,其他服務想調用user-system服務的接口,只需要加user-server-api的依賴,並且實現UserServerApi接口即可,使用這樣一種黑盒調用,更方便接口的管理。而且,消費端不需要關注我接口內部實現的變化,只需要按規劃升級依賴即可,而且接口的調用是沒有什麼開發量的。這裏可以看下消費端的具體使用。

消費端:

在消費端,需要定義FeignClient,所以首先是要在springboot啓動類中增加註解@EnableFeignClients,啓動類在啓動時,會掃描FeignClient註解的類實現自動裝配,如果不加這一註解,系統是無法識別的。只會導致接口無法使用。404就來了。

@SpringBootApplication
@EnableFeignClients
public class BlogWebApplication {

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

}

然後呢,就是加入所需要服務的api依賴。

		<dependency>
			<groupId>com.king.dk</groupId>
			<artifactId>user-server-api</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

然後根據java的繼承特性,繼承服務提供端提供的api類

/**
 *
 * @author DKing/Chenxiaorui
 * @description
 * @date 2020/4/1
 *
 */
@FeignClient(value = "${user-system.server.appname}")
public interface UserSystemApi extends UserServerApi {
}

這樣一來,我們可以在消費端使用UserSystemApi類new的對象來調用UserServerApi的restful接口,從而調到服務提供端的具體實現。

可以看到,消費端,我們並沒有做任何代碼的開發,也沒有類似接口的冗餘聲明,只需要管理好依賴的版本和服務提供端的應用名稱,就可以完成對UserSystem服務交互。em,很解耦,很內聚。

Ps.以上代碼都是空實現,隨手寫的小Demo,但是有自己對Feign接口使用的一些小心得。不喜勿噴。哈哈歡迎交流,探討

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