四即横、微服務框架spring cloud組件之聲明式服務調用feign

  • 在Spring Cloud Netflix棧中,各個微服務都是以HTTP接口的形式暴露自身服務的裆赵,因此在調用遠程服務時就必須使用HTTP客戶端东囚。我們可以使用JDK原生的URLConnection、Apache的Http Client战授、Netty的異步HTTP Client, Spring的RestTemplate页藻。但是桨嫁,用起來最方便、最優(yōu)雅的還是要屬Feign了份帐。Feign是一種聲明式璃吧、模板化的HTTP客戶端。在Spring Cloud中使用Feign, 我們可以做到使用HTTP請求遠程服務時能與調用本地方法一樣的編碼體驗废境,開發(fā)者完全感知不到這是遠程方法肚逸,更感知不到這是個HTTP請求。
  • feign的優(yōu)勢就是提供統(tǒng)一的抽象彬坏,通過接口來實現遠程調用朦促,更加符合我們的編程習慣图谷。實際上feign就是對restTemplate和ribbon進一步封裝惜傲,使之使用更加簡單、高效翘贮。通過Feign幻赚, 我們能把HTTP遠程調用對開發(fā)者完全透明禀忆,得到與調用本地方法一致的編碼體驗。這一點與阿里Dubbo中暴露遠程服務的方式類似落恼,區(qū)別在于Dubbo是基于私有二進制協(xié)議箩退,而Feign本質上還是個HTTP客戶端。如果是在用Spring Cloud Netflix搭建微服務佳谦,那么Feign無疑是最佳選擇戴涝。

一、入門體驗

1钻蔑、搭建注冊中心和服務提供者

(1)搭建eureka注冊中心
server-url=http://localhost:8081/eureka/
(2)搭建eureka服務提供中心

  • spring.application.name=eureka-client
  • 提供restful方法為:
@RequestMapping("/hello/{name}")
    public String hello(@PathVariable String name){
        return "hello "+name;
    }

2啥刻、搭建服務消費中心(使用feign)

(1)一如feign相關包,老版本用spring-cloud-starter-feign咪笑,Finchley.SR1版本的用spring-cloud-starter-openfeign

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

(2)定義接口

/**
 * 定義一個feign接口可帽,通過@ FeignClient(“服務名”),來指定調用哪個服務
 */
@FeignClient(name = "EUREKA-CLIENT")
public interface HelloService {
    @RequestMapping("/hello/{name}")
    String hello(@PathVariable("name") String name);
}

(3)創(chuàng)建controller并訪問

@Autowired
    private HelloService helloService;
    @RequestMapping("/hello")
    public String hello(){
        return helloService.hello("qiu");
    }

(4)開啟feign服務

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class RibbonConsumer1Application {
    public static void main(String[] args) {
        SpringApplication.run(RibbonConsumer1Application.class, args);
    }
}

(5)配置

server.port=8083
spring.application.name=feign-consumer
#向注冊中心注冊并獲取相關的服務提供者信息
eureka.client.service-url.defaultZone=http://localhost:8081/eureka/

(6)測試

3窗怒、feign調用整個流程

1映跟、首先通過@EnableFeignCleints注解開啟FeignCleint
2、根據Feign的規(guī)則實現接口扬虚,并加@FeignCleint注解
3努隙、程序啟動后,會進行包掃描孔轴,掃描所有的@ FeignCleint的注解的類剃法,并將這些信息注入到ioc容器中碎捺。
4路鹰、當接口的方法被調用贷洲,通過jdk的代理,來生成具體的RequesTemplate
RequesTemplate在生成Request
5晋柱、Request交給Client去處理优构,其中Client可以是HttpUrlConnection、HttpClient也可以是Okhttp
6雁竞、最后Client被封裝到LoadBalanceClient類钦椭,這個類結合類Ribbon做到了負載均衡。

二碑诉、feign一些高級功能

  • 與ribbon搭配使用
  • 重試機制
  • 與hystrix搭配使用
  • 替換底層連接方式(比如替換成httpClient)
  • feign的配置(默認和自定義配置)
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末彪腔,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子进栽,更是在濱河造成了極大的恐慌德挣,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件快毛,死亡現場離奇詭異格嗅,居然都是意外死亡,警方通過查閱死者的電腦和手機唠帝,發(fā)現死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門屯掖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人襟衰,你說我怎么就攤上這事贴铜。” “怎么了瀑晒?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵阀湿,是天一觀的道長。 經常有香客問我瑰妄,道長陷嘴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任间坐,我火速辦了婚禮灾挨,結果婚禮上,老公的妹妹穿的比我還像新娘竹宋。我一直安慰自己劳澄,他們只是感情好,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布蜈七。 她就那樣靜靜地躺著秒拔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪飒硅。 梳的紋絲不亂的頭發(fā)上砂缩,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天作谚,我揣著相機與錄音,去河邊找鬼庵芭。 笑死妹懒,一個胖子當著我的面吹牛,可吹牛的內容都是我干的双吆。 我是一名探鬼主播眨唬,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼好乐!你這毒婦竟也來了匾竿?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蔚万,失蹤者是張志新(化名)和其女友劉穎搂橙,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體笛坦,經...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡区转,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了版扩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片废离。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖礁芦,靈堂內的尸體忽然破棺而出蜻韭,到底是詐尸還是另有隱情,我是刑警寧澤柿扣,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布肖方,位于F島的核電站,受9級特大地震影響未状,放射性物質發(fā)生泄漏俯画。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一司草、第九天 我趴在偏房一處隱蔽的房頂上張望艰垂。 院中可真熱鬧,春花似錦埋虹、人聲如沸猜憎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胰柑。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柬讨,已是汗流浹背崩瓤。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姐浮,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓葬馋,卻偏偏與公主長得像卖鲤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子畴嘶,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內容

  • 1 為什么需要服務發(fā)現 簡單來說蛋逾,服務化的核心就是將傳統(tǒng)的一站式應用根據業(yè)務拆分成一個一個的服務,而微服務在這個基...
    謙小易閱讀 25,108評論 4 93
  • 微服務架構模式的核心在于如何識別服務的邊界窗悯,設計出合理的微服務区匣。但如果要將微服務架構運用到生產項目上,并且能夠發(fā)揮...
    java菜閱讀 2,956評論 0 6
  • 微服務架構模式的核心在于如何識別服務的邊界蒋院,設計出合理的微服務亏钩。但如果要將微服務架構運用到生產項目上,并且能夠發(fā)揮...
    程序員技術圈閱讀 2,783評論 10 27
  • ?通過前面兩章對Spring Cloud Ribbon和Spring Cloud Hystrix的介紹欺旧,我們已經掌...
    Chandler_玨瑜閱讀 213,199評論 15 140
  • 翠湖里的花最為繽紛和嬌艷了姑丑,除了蝴蝶花和三角梅,其他的姹紫嫣紅我都認不得了辞友,只好在翠湖里的花影中迷醉著…… 汪曾祺...
    聽風66699閱讀 331評論 0 1