日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenFeign组件的使用(使用nacos作为服务注册中心)

發(fā)布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenFeign组件的使用(使用nacos作为服务注册中心) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、OpenFeign介紹

Feign是一個聲明式的偽Http客戶端,它使得寫Http客戶端變得更簡單。使用Feign,只需要創(chuàng)建一個接口并注解。它具有可插拔的注解特性(可以使用springmvc的注解),可使用Feign 注解和JAX-RS注解。Feign支持可插拔的編碼器和解碼器。Feign默認集成了Ribbon,默認實現(xiàn)了負載均衡的效果并且springcloud為feign添加了springmvc注解的支持。

思考:使用RestTemplate+ribbon已經(jīng)可以完成服務(wù)間的調(diào)用,為什么還要使用feign?
存在問題如下:

  • 1.每次調(diào)用服務(wù)都需要寫這些代碼,存在大量的代碼冗余
  • 2.服務(wù)地址如果修改,維護成本增高
  • 3.使用時不夠靈活

解決了服務(wù)調(diào)用寫了一大串url解決了服務(wù)調(diào)用寫了一大串url

二、使用步驟

  • 服務(wù)調(diào)用方法引入依賴OpenFeign依賴
  • <!--Open Feign依賴--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
  • 客戶端入口類加入注解開啟OpenFeign支持和服務(wù)發(fā)現(xiàn)支持
  • @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class Users9099Application {public static void main(String[] args) {SpringApplication.run(Users9099Application.class, args);} }
  • 創(chuàng)建一個客戶端調(diào)用接口
  • //調(diào)用商品服務(wù)feign的接口 @FeignClient("products") public interface ProductClient {@GetMapping("/product/find")Map<String,Object> find(@RequestParam("id") String id); }
    • FeignClient注解的一些屬性

    重點看一下value和name:vaule和name 其實是一個屬性
    關(guān)于調(diào)用目前有兩種:

    • 接口提供方在注冊中心。
      如果服務(wù)提供方已經(jīng)注冊到注冊中心了,那么name或者value的值為:服務(wù)提供方的服務(wù)名稱。
      必須為所有客戶端指定一個name或者value@FeignClient(value=“run-product”,fallback ProductClientServiceFallBack.class)
    • 單獨的一個http接口,接口提供方?jīng)]有注冊到注冊中心。
      @FeignClient(name=“runClient11111”,url=“l(fā)ocalhost:8001”)。 此處name的值為:調(diào)用客戶端的名稱。

    以上兩種方式都能正常調(diào)用。name可以為注冊中心的實例名稱,加上url屬性時,name的值就與注冊中心實例名稱無關(guān)

  • 客戶端調(diào)用OpenFeign方法
  • @RestController @Slf4j public class UserController {@Autowiredprivate ProductClient productClient;@GetMapping("/user/getProductInfo")public Map<String,Object> getProductInfo(String productId){Map<String, Object> map = productClient.find(productId);log.info("返回的信息:[{}]"+map);return map;}
  • 服務(wù)端入口類加入注解開啟服務(wù)發(fā)現(xiàn)支持
  • @SpringBootApplication @EnableDiscoveryClient public class Products9098Application {public static void main(String[] args) {SpringApplication.run(Products9098Application.class, args);} }
  • 創(chuàng)建服務(wù)端被調(diào)用方法
  • @RestController @Slf4j public class ProductController {@Value("${server.port}")private int port;@GetMapping("/product/find")public Map<String,Object> find(@RequestParam("id") String id){Map<String, Object> map = new HashMap<>();log.info("進入商品服務(wù),當前接收的商品id為:[{}]",id);map.put("status",true);map.put("msg","當前商品服務(wù)調(diào)用成功,查詢商品id為:"+id+",當前處理服務(wù)的端口號為: "+port);return map;} }
  • 客戶端配置文件
  • server.port=9099 #指定當前服務(wù)端口 spring.application.name=users #指定服務(wù)名稱 spring.cloud.nacos.server-addr=xxx.xxx.xxx.xxx:8848 #指定nacos服務(wù)地址 spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr} #指定注冊中心地址 management.endpoints.web.exposure.include=* #暴露所有web端點
  • 服務(wù)端配置文件
  • server.port=9098 spring.application.name=products spring.cloud.nacos.server-addr=xxx.xxx.xxx.xxx:8848 spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr} management.endpoints.web.exposure.include=*

    兩個服務(wù)啟動后,在nacos的控制臺可以看到以下兩個服務(wù):

    訪問本地鏈接:http://localhost:9099/user/getProductInfo?productId=1
    可以看到以下:

    需要注意的是,OpenFeign默認實現(xiàn)負載均衡策略,如果products服務(wù)有多個實例,那么調(diào)用的時候會輪詢。

    一張圖助記:

    三、OpenFeign調(diào)用遠程服務(wù)(非本機微服務(wù))

    //如果同時指定value和url屬性,則以url屬性為準,value屬性指定的值便當做客戶端的名稱 @FeignClient(value = "productFeign",url = "遠程ip:遠程服務(wù)端口",fallback = ProductFeignHandler.class) public interface ProductFeign {@GetMapping("/product/find")Map<String,Object> find(@RequestParam("id") String id); }

    四、Feign原理簡述

    • 啟動時,程序會進行包掃描,掃描所有包下所有@FeignClient注解的類,并將這些類注入到spring的IOC容器中。當定義的Feign中的接口被調(diào)用時,通過JDK的動態(tài)代理來生成RequestTemplate。
    • RequestTemplate中包含請求的所有信息,如請求參數(shù),請求URL等。
    • RequestTemplate聲場Request,然后將Request交給client處理,這個client默認是JDK的HTTPUrlConnection,也可以是OKhttp、Apache的HTTPClient等。
    • 最后client封裝成LoadBaLanceClient,結(jié)合ribbon負載均衡地發(fā)起調(diào)用。

    參考文章
    參考文章

    總結(jié)

    以上是生活随笔為你收集整理的OpenFeign组件的使用(使用nacos作为服务注册中心)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。