Openfein實現遠程調用的方法(實操)

文章目錄

  • 環境準備
  • 一、URL中接收參數
  • 二、接收一個參數
  • 三、接收多個參數
  • 四、傳遞對象
  • 五、傳遞JSON格式數據

環境準備

下面的配置,服務調用方加入即可。

  1. 依賴導入:
        <!--        openfeign依賴--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
  1. 開啟Feign功能:

@EnableFeignClients //開啟feign功能
@SpringBootApplication
public class OrderServiceApplication {public static void main(String[] args) {SpringApplication.run(OrderServiceApplication.class, args);}
}
  1. 創建Openfeign接口
//假定:被調用服務的名稱為product-service,服務的接口路徑統一為`product`開頭
//path是可加 可不加的,value必須有,用于指定被調用服務
@FeignClient(value="product-service",path="/product")//FeignClient用于綁定需要調用的服務
public interface ProductApi {//path可以有可無,使用path,遠程調用時,默認會加上path前綴路徑
}

做足準備后,接下來我們就可以使用Openfeign來進行遠程調用了。


一、URL中接收參數

  1. 假定這是服務提供方的接口:
@RestController
@RequestMapping("/product")
public class ProductController {@Autowiredprivate ProductService productService;@RequestMapping("/{productId}")public ProductInfo getProductInfoById(@PathVariable("productId") Integer productId){return productService.selectProductById(productId);}
}
  1. 定義Openfeign接口

@FeignClient(value="product-service",path="/product")//FeignClient用于綁定需要調用的服務
public interface ProductApi {//@PathVariable不可省略!把變量申明為url的一部分@RequestMapping("/{productId}")ProductInfo getProductInfo(@PathVariable("productId ") Integer productId);
}

我們發現實際上Openfeign接口的定義和服務提供方Controller接口的定義是非常相似的,這有助于我們去書寫Openfeign接口。

  1. 通過Openfeign進行遠程調用
    在這里插入圖片描述

order是服務調用方的一個接口,意思是查詢orderId為1的訂單信息。


二、接收一個參數

假定這是服務提供方接口(回顯服務):


@RestController
@RequestMapping("/product")
public class ProductController {@RequestMapping("/p1")public String p1(Integer id){return "product-service 接收到參數, id:"+id;}
}

定義Openfeign接口:

//同樣地,和服務提供方接口寫法類似
@FeignClient(value="product-service",path="/product")//FeignClient用于綁定需要調用的服務
public interface ProductApi {@RequestMapping("/p1")String p1(@RequestParam("id")Integer id);//@RequestParam不可省略
}

然后我們寫一個測試接口,用Openfeign去調用ProductController的p1方法:

@RestController
@RequestMapping("/feign")
public class FeignController {@Autowiredprivate ProductApi productApi;@RequestMapping("/o1")public String o1(Integer id){return productApi.p1(id);}
}

運行結果:
在這里插入圖片描述


三、接收多個參數

假定這是服務提供方接口(回顯服務):


@RestController
@RequestMapping("/product")
public class ProductController {@Autowiredprivate ProductService productService;@RequestMapping("/p2")public String p2(Integer id, String name){return "product-service 接收到參數, id:"+id+",name:"+name;}
}

定義Openfeign接口:

@FeignClient(value="product-service",path="/product")//FeignClient用于綁定需要調用的服務
public interface ProductApi {//同樣地,@RequestParam都不能夠省略@RequestMapping("/p2")String p2(@RequestParam("id")Integer id,@RequestParam("name") String name);
}

然后通過下面的測試接口調用Openfeign接口進行遠程調用:

@RestController
@RequestMapping("/feign")
public class FeignController {@Autowiredprivate ProductApi productApi;@RequestMapping("/o2")public String o2(Integer id,String name){return productApi.p2(id,name);}
}

運行結果:
在這里插入圖片描述

四、傳遞對象

假定這是服務提供方接口(回顯服務):


@RestController
@RequestMapping("/product")
public class ProductController {@Autowiredprivate ProductService productService;@RequestMapping("/p3")public String p3(ProductInfo productInfo){return "product-service 接收到參數: productInfo"+productInfo.toString();}}

遠程調用接口:


@FeignClient(value="product-service",path="/product")//FeignClient用于綁定需要調用的服務
public interface ProductApi {@RequestMapping("/p3")public String p3(@SpringQueryMap ProductInfo productInfo);}

@SpringQueryMap 會把Java對象的字段映射成HTTP 請求的查詢參數,同樣地,是不可省略的注解

通過Openfeign進行遠程調用:

@RestController
@RequestMapping("/feign")
public class FeignController {@Autowiredprivate ProductApi productApi;@RequestMapping("/o3")public String o3(){ProductInfo productInfo=new ProductInfo();productInfo.setId(45);productInfo.setProductName("T恤");return productApi.p3(productInfo);}
}

運行結果:
在這里插入圖片描述

五、傳遞JSON格式數據

假定這是我們的服務提供方(回顯服務):


@RestController
@RequestMapping("/product")
public class ProductController {@RequestMapping("/p4")public String p4(@RequestBody ProductInfo productInfo){return "product-service 接收到參數: productInfo"+productInfo.toString();}}

定義Openfeign接口:


@FeignClient(value="product-service",path="/product")//FeignClient用于綁定需要調用的服務
public interface ProductApi {@RequestMapping("/p4")public String p4(@RequestBody ProductInfo productInfo);
}

@RequestBody 不可省略,表示接收json格式數據,并且轉換成Java對象

通過下面的測試接口,實現遠程調用:


@RestController
@RequestMapping("/feign")
public class FeignController {@Autowiredprivate ProductApi productApi;@RequestMapping("/o4")public String o4(){ProductInfo productInfo=new ProductInfo();productInfo.setId(45);productInfo.setProductName("T恤");return productApi.p4(productInfo);}
}

運行結果:
在這里插入圖片描述


以上便是openfeign進行遠程調用的基本使用方法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901856.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Bright+Data網頁解鎖器:旅游行業數據革命的“隱形引擎”

在數字經濟浪潮中&#xff0c;旅游行業正經歷前所未有的變革。當消費者指尖滑動間完成跨國酒店預訂&#xff0c;當航空公司每秒調整萬次艙位價格&#xff0c;背后是一場無聲的數據戰爭。而在這場戰爭中&#xff0c;BrightData網頁解鎖器正成為旅游企業破局的關鍵武器——它像一…

OpenCV 圖形API(38)圖像濾波-----Sobel 算子操作函數Sobel()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::gapi::Sobel 函數是 OpenCV 的 G-API 模塊中用于執行 Sobel 算子操作的一個函數&#xff0c;主要用于圖像的邊緣檢測。Sobel 算子通過計算圖…

CS5346 - Interactivity in Visualization 可視化中的交互

文章目錄 Visualization representation interactionInteraction &#xff08;交互&#xff09;Benefits (好處)Typical Interaction Techniques&#xff08;交互技術&#xff09;SelectFilteringAbstract / Elaborate幾何放縮&#xff08;Geometric zoom)語義放縮&#xff0…

第十六屆藍橋杯大賽軟件賽省賽 C++ 大學 B 組 部分題解

賽時參加的是Python組&#xff0c;這是賽后寫的題解&#xff0c;還有兩題暫時還不會&#xff0c;待更新 題目鏈接題目列表 - 洛谷 | 計算機科學教育新生態 A 移動距離 答案&#xff1a;1576 C 可分解的正整數 Python3 import itertools from functools import cmp_to_ke…

Vue 解決 Error: please transfer a valid prop path to form item!

在 Vue.js 中使用表單驗證庫&#xff08;如 VeeValidate 或 Element UI 的表單組件時&#xff09;&#xff0c;遇到錯誤信息 "please transfer a valid prop path to form item!" 通常指的是在表單項的屬性綁定中&#xff0c;路徑&#xff08;prop path&#xff09;不…

在 Visual Studio Code 中安裝通義靈碼 - 智能編碼助手

高效的編碼工具對于提升開發效率和代碼質量至關重要。 通義靈碼作為一款智能編碼助手&#xff0c;為開發者提供了全方位的支持。 本文將詳細介紹如何在 Visual Studio Code&#xff08;簡稱 VSCode&#xff09;中安裝通義靈碼&#xff0c;以及如何進行相關配置以開啟智能編碼…

SQL 解析 with as dual sysdate level

目錄 sql的運行順序 with as EXTRACT ?編輯 dual sysdate level ?編輯 ?編輯 Oracle中的日期存儲 核心部分 拆解字符串并計算最小值 關聯子查詢 NVL 函數 REGEXP_SUBSTR() sql的運行順序 <select id="getTrendList" parameterType="java.uti…

快手OneRec 重構推薦系統:從檢索排序到生成統一的躍遷

文章目錄 1. 背景2. 方法2.1 OneRec框架2.2 Preliminary2.3 生成會話列表2.4 利用獎勵模型進行迭代偏好對齊2.4.1 訓練獎勵模型2.4.2 迭代偏好對齊 3. 總結 昨天面試的時候聊到了OneRec&#xff0c;但是由于上次看這篇文章已經是一個月之前&#xff0c;忘得差不多了&#xff0c…

軟考高級系統架構設計師-第11章 系統架構設計

【本章學習建議】 根據考試大綱&#xff0c;本章不僅考查系統架構設計師單選題&#xff0c;預計考12分左右&#xff0c;而且案例分析和論文寫作也是必考&#xff0c;對應第二版教材第7章&#xff0c;屬于重點學習的章節。 軟考高級系統架構設計師VIP課程https://edu.csdn.net/…

selenium之文件下載

Selenium 自動化測試&#xff1a;輕松搞定文件下載 在 Web 自動化測試中&#xff0c;經常會遇到需要驗證文件下載功能的場景。例如&#xff0c;測試報告的導出、用戶上傳文件的下載、PDF 文檔的生成與下載等等。Selenium 本身并沒有直接處理文件下載的內置方法&#xff0c;但我…

基于遷移學習實現肺炎X光片診斷分類

大家好&#xff0c;我是帶我去滑雪&#xff01; 肺炎是全球范圍內致死率較高的疾病之一&#xff0c;尤其是在老年人、免疫系統較弱的患者群體中&#xff0c;更容易引發嚴重并發癥。傳統上&#xff0c;肺炎的診斷依賴于醫生的臨床經驗以及影像學檢查&#xff0c;尤其是X光片&…

工業數據治理范式革新:時序數據庫 TDengine虛擬表技術解析

小T導讀&#xff1a;在工業數字化過程中&#xff0c;數據如何從設備采集順利“爬坡”到上層應用&#xff0c;一直是個難題。傳統“單列模型”雖貼合設備協議&#xff0c;卻讓上層分析舉步維艱。TDengine 用一種更聰明的方法打通了這條數據通路&#xff1a;不強求建模、不手動轉…

Redis面試——日志

一、RDB&#xff08;Redis DataBase&#xff09; RDB 全程是 Redis DataBase&#xff0c;它是一種將 Redis 在某一時刻內存中的數據以快照形式保存到磁盤的機制 &#xff0c;相當于給執行save/bgsave命令時刻的內存數據庫數據拍了一張快照我們如果通過save命令來執行快照&…

【Android】常用參數實踐 用戶界面UI 布局文件XML

本文將系統總結 Android XML 布局的通用參數和常用布局類型的專屬規則 一、通用布局參數 這些參數適用于所有 View 和 ViewGroup&#xff0c;是布局設計的基石。 1. 尺寸控制 android:layout_width 與 android:layout_height 定義視圖的寬度和高度&#xff0c;可選值&#xf…

解決 VSCode 中 NVM 配置后無法識別 Node 和 NPM 的問題

在開發中&#xff0c;我們經常需要使用 Node.js 和 NPM 來管理 JavaScript 項目依賴&#xff0c;而 NVM&#xff08;Node Version Manager&#xff09;是開發者在本地環境中管理多個 Node.js 版本的得力工具。不過&#xff0c;有時候在 VSCode 中配置完 NVM 后&#xff0c;可能…

BGP分解實驗·23——BGP選路原則之路由器標識

在選路原則需要用到Router-ID做選路決策時&#xff0c;其對等體Router-ID較小的路由將被優選&#xff1b;其中&#xff0c;當路由被反射時&#xff0c;包含起源器ID屬性時&#xff0c;該屬性將代替router-id做比較。 實驗拓撲如下&#xff1a; 實驗通過調整路由器R1和R2的rout…

Linux: 線程同步

目錄 一 前言 二 線程饑餓 三 線程同步 四 條件變量 1. cond &#xff08; condition&#xff09; 2. pthread_cond_wait() &#xff1a; 3. pthread_cond_signal() 五 條件變量的使用 一 前言 在上篇文章Linux : 多線程互斥-CSDN博客我們講解了線程互斥的概念&#xff…

MyBatisPlus-QueryWrapper的exists方法拼接SQL中的EXISTS子句

在 MyBatis-Plus 中,QueryWrapper 的 exists 方法用于拼接 SQL 中的 EXISTS 子句,通常用于構 建子查詢條件。以下是具體用法和示例: ??1. 基本語法?? // 判斷是否存在符合條件的記錄 queryWrapper.exists(String existsSql); queryWrapper.notExists(String existsSq…

[數據結構]哈希表

目錄 1、哈希表 1.1、概念 1.2、沖突 2、哈希函數設計 3、負載因子調節 4、閉散列 5、開散列/哈希桶&#xff08;重點掌握&#xff09; 6、實現哈希桶 6.1、put方法 6.2、HashMap的擴容機制 6.3、get方法 7、HashMap 8、HashSet 8.1、哈希表性能分析 9、hashcod…

VS-Code創建Vue3項目

1 創建工程文件 創建一個做工程項目的文件夾 如&#xff1a;h5vue 2 cmd 進入文件 h5vue 3 輸入如下命令 npm create vuelatest 也可以輸入 npm create vitelatest 4 輸入項目名稱 項目名稱&#xff1a;自已輸入 回車 可以按鍵盤 a (全選) 回車&#xff1a; Playwright…