<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了OpenFeign遠端呼叫實現的具體程式碼,供大家參考,具體內容如下
OpenFeign目前是Spring Cloud 二級子專案。平時說的Feign指的是Netflix下的Feign,現在我們學習的是OpenFeign,是Spring提供的。
OpenFeign是一種宣告式、模板化的HTTP使用者端(僅在Application Client中使用)(稱OpenFeign作用:宣告式服務呼叫)。宣告式呼叫是指,就像呼叫本地方法一樣呼叫遠端方法,無需感知操作遠端http請求。學習完OpenFeign後可以不使用RestTemplate進行呼叫。
Spring Cloud的宣告式呼叫, 可以做到使用 HTTP請求遠端服務時能就像呼叫本地方法一樣的體驗,開發者完全感知不到這是遠端方法,更感知不到這是個HTTP請求。Feign的應用,讓Spring Cloud微服務呼叫像Dubbo一樣,Application Client直接通過介面方法呼叫Application Service,而不需要通過常規的RestTemplate構造請求再解析返回資料。它解決了讓開發者呼叫遠端介面就跟呼叫本地方法一樣,無需關注與遠端的互動細節,更無需關注分散式環境開發。
使用OpenFeign時就好像在寫控制器方法,OpenFeign都是寫在介面中,在宣告的方法上新增SpringMVC註解或宣告的引數上新增SpringMVC註解就可以完成呼叫遠端的控制器方法。
openfeign的用途:服務發現,負載均衡,服務呼叫
openfeign的實現原理:基於@EnableFeignClients 將所有被@FeignClient註解的類 註冊到容器中。當這些被@FeignClient註解的類被呼叫時會建立一個動態代理的物件為我們建立被呼叫類的範例,然後都會被統一轉發給 Feign 框架所定義的一個 InvocationHandler , 由該 Handler 完成後續的 HTTP 轉換, 傳送, 接收, 翻譯HTTP響應的工作。本文主要介紹OpenFeign服務呼叫的用途,實現微服務間的遠端呼叫。
springboot版本為2.3.5
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
pom依賴
<!-- openfeign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.2.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>2.2.5.RELEASE</version> </dependency>
服務請求方
1.在springboot啟動類中新增註解@EnableFeignClients
package com.anjiplus.template.gaea.business; import com.anji.plus.gaea.annotation.enabled.EnabledGaeaConfiguration; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; import springfox.documentation.oas.annotations.EnableOpenApi; // openFeign註解,括號內容為遠端呼叫類包路徑 @EnableFeignClients("com.anjiplus.template.gaea.business.modules.model.openFeign") @EnableOpenApi public class ReportApplication { public static void main( String[] args ) { SpringApplication.run(ReportApplication.class); } }
2.新增遠端呼叫介面類,介面類上需要使用@FeignClient註解標註呼叫服務的服務名和服務地址
package com.anjiplus.template.gaea.business.modules.model.openFeign; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.*; /** * @author 莫須有 * @Date 2022/6/10 15:52 * @Description openFeign服務呼叫類 */ //註解表示服務呼叫的服務名稱和服務地址 @FeignClient(value = "kg-data-manage", url = "http://127.0.0.1:10100/datamanage") @Component public interface ModelOpenFeign { /** * @Description 查詢使用者下所用的模型資訊 * @author 莫須有 * @date 2022/6/17 * @param userId 使用者編號 * @return list */ @GetMapping("/dashBoard/getFactory")// 呼叫的路徑為服務提供方介面請求路徑 String getFactoryList(@RequestParam("userId") String userId); @GetMapping("/dashBoard/getPointList") String getPointList(@RequestParam("taskId") String factoryId); @GetMapping("/dashBoard/getData") String getData(@RequestParam("sql") String sql); }
服務提供方
服務提供方只需像正常的controller層介面一樣編寫就可以,不需要額外的設定,根據需要在controller層進行介面開發,然後再service層中做具體的實現即可,需要注意的是請求引數和返回引數的型別需要兩邊一致,這是必須滿足的。
package com.xasj.controller.model.openFeign; import com.xasj.entity.model.vo.DashBoardModelInfo; import com.xasj.entity.model.vo.DashBoardPointInfo; import com.xasj.service.model.openFeign.DashBoardOpenFeignService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; /** * @author 莫須有 * @Date 2022/6/10 17:52 * @Description openFeign服務提供類 */ @RestController public class DashBoardOpenFeignController { @Resource private DashBoardOpenFeignService dashBoardOpenFeignService; @GetMapping("/dashBoard/getFactory") public List<DashBoardModelInfo> getFactoryList(@RequestParam(name = "userId") String userId){ return dashBoardOpenFeignService.getFactoryList(userId); } @GetMapping("/dashBoard/getPointList") public List<DashBoardPointInfo> getPointList(@RequestParam(name = "taskId")String taskId){ return dashBoardOpenFeignService.getPointList(taskId); } @GetMapping("/dashBoard/getData") public List getData(@RequestParam("sql") String sql){ return dashBoardOpenFeignService.getData(sql); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45