OpenFeign组件的使用(使用nacos作为服务注册中心)
生活随笔
收集整理的這篇文章主要介紹了
OpenFeign组件的使用(使用nacos作为服务注册中心)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、OpenFeign介紹
Feign是一個聲明式的偽Http客戶端,它使得寫Http客戶端變得更簡單。使用Feign,只需要創建一個接口并注解。它具有可插拔的注解特性(可以使用springmvc的注解),可使用Feign 注解和JAX-RS注解。Feign支持可插拔的編碼器和解碼器。Feign默認集成了Ribbon,默認實現了負載均衡的效果并且springcloud為feign添加了springmvc注解的支持。
思考:使用RestTemplate+ribbon已經可以完成服務間的調用,為什么還要使用feign?
存在問題如下:
- 1.每次調用服務都需要寫這些代碼,存在大量的代碼冗余
- 2.服務地址如果修改,維護成本增高
- 3.使用時不夠靈活
解決了服務調用寫了一大串url解決了服務調用寫了一大串url
二、使用步驟
- FeignClient注解的一些屬性
重點看一下value和name:vaule和name 其實是一個屬性
關于調用目前有兩種:
- 接口提供方在注冊中心。
如果服務提供方已經注冊到注冊中心了,那么name或者value的值為:服務提供方的服務名稱。
必須為所有客戶端指定一個name或者value@FeignClient(value=“run-product”,fallback ProductClientServiceFallBack.class) - 單獨的一個http接口,接口提供方沒有注冊到注冊中心。
@FeignClient(name=“runClient11111”,url=“localhost:8001”)。 此處name的值為:調用客戶端的名稱。
以上兩種方式都能正常調用。name可以為注冊中心的實例名稱,加上url屬性時,name的值就與注冊中心實例名稱無關
兩個服務啟動后,在nacos的控制臺可以看到以下兩個服務:
訪問本地鏈接:http://localhost:9099/user/getProductInfo?productId=1
可以看到以下:
需要注意的是,OpenFeign默認實現負載均衡策略,如果products服務有多個實例,那么調用的時候會輪詢。
一張圖助記:
三、OpenFeign調用遠程服務(非本機微服務)
//如果同時指定value和url屬性,則以url屬性為準,value屬性指定的值便當做客戶端的名稱 @FeignClient(value = "productFeign",url = "遠程ip:遠程服務端口",fallback = ProductFeignHandler.class) public interface ProductFeign {@GetMapping("/product/find")Map<String,Object> find(@RequestParam("id") String id); }四、Feign原理簡述
- 啟動時,程序會進行包掃描,掃描所有包下所有@FeignClient注解的類,并將這些類注入到spring的IOC容器中。當定義的Feign中的接口被調用時,通過JDK的動態代理來生成RequestTemplate。
- RequestTemplate中包含請求的所有信息,如請求參數,請求URL等。
- RequestTemplate聲場Request,然后將Request交給client處理,這個client默認是JDK的HTTPUrlConnection,也可以是OKhttp、Apache的HTTPClient等。
- 最后client封裝成LoadBaLanceClient,結合ribbon負載均衡地發起調用。
參考文章
參考文章
總結
以上是生活随笔為你收集整理的OpenFeign组件的使用(使用nacos作为服务注册中心)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试了57位高级产品经理,我发现混得好的
- 下一篇: 互联网晚报 | 11月13日 星期六 |