<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
一開始,我們使用原生的 DiscoveryClient 發現服務和使用RestTemplate進行服務間呼叫,然後我們自己手動開發了一個負載均衡元件,最後介紹了負載均衡元件Ribbon。每個章節呼叫服務的方式也有所不同,共同點則是都是基於RestTemplate 來實現的,想必大家都會覺得這樣的呼叫方式有點麻煩,每次呼叫前都要寫請求協定,服務名稱,介面名稱、組裝引數、處理響應資料型別,這些都是一些重複的工作,程式碼也都高度相似,每次請求只有 URL 不同,請求方法不同、引數不同,其它東西基本都是一樣的,既然如此,那有沒有辦法簡化請求呢?本文我們要聊的宣告式微服務呼叫OpenFeign 。
OpenFeign是一個顯示宣告式的WebService使用者端。使用OpenFeign能讓編寫Web Service使用者端更加簡單。使用時只需定義服務介面,然後在上面新增註解。OpenFeign也支援可拔插式的編碼和解碼器。spring cloud對feign進行了封裝,使其支援MVC註解和HttpMessageConverts。和eureka(服務註冊中心)和ribbon組合可以實現負載均衡。在Spring Cloud中使用OpenFeign,可以做到使用HTTP請求存取遠端服務,就像呼叫本地方法一樣的,開發者完全感知不到這是在呼叫遠端方法,更感知不到在存取HTTP請求,非常的方便
接下來,就開始我們的專案實戰,建立兩個服務,一個是dms(就是碼錶服務,提供各種下拉選項列表),一個是應用系統app(實際的業務系統)
首先建立名為dms的maven專案,引入依賴
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies>
建立組態檔:
server:
port: 8003
spring:
application:
name: dms
eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka/
logging:
pattern:
console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'
編寫啟動類
@EnableDiscoveryClient @EnableFeignClients @EnableEurekaClient @SpringBootApplication public class DmsApplication { public static void main(String[] args) { SpringApplication.run(DmsApplication.class, args); } }
注意此時,我們在啟動類上面增加了@EnableFeignClients和@EnableDiscoveryClient註解。
編寫api模組程式碼,注意這是一個介面對外提供服務,介面的服務名稱是dms,根據code程式碼值獲取名稱:
@FeignClient(value = "dms") public interface DmsApi { @RequestMapping(value="/dict/[code]", method = RequestMethod.GET) public String findNameByCode(@PathVariable("code") String code); }
編寫controller類,可以實現DmsApi介面,這裡簡單以性別舉例:
@RestController public class DmsController implements DmsApi { @Override public String findNameByCode(String code) { switch (code){ case "0" : return "男"; case "1" : return "女"; default: return "未知"; } } }
dms模組就開發完畢了。
同樣的,建立app模組,注意需要引入dms模組,以便呼叫其介面
<dependencies> <dependency> <groupId>com.cxy965</groupId> <artifactId>dms</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> </dependencies>
建立controller層:在此注入dmsApi,並通過dmsApi呼叫其findNameByCode()方法,即可完成服務的呼叫程式碼!
@RestController public class AppController { @Autowired private DmsApi dmsApi; @RequestMapping("/index") public String index(){ String nameByCode = dmsApi.findNameByCode("1"); return nameByCode; } }
啟動類
@EnableEurekaClient @SpringBootApplication public class AppApplication { public static void main(String[] args) { SpringApplication.run(AppApplication.class, args); } }
返回了正確的結果,當註冊中心有多個dms服務時,呼叫時會自動起到負載均衡的作用。
OpenFeign 是 Spring Cloud 家族的一個成員, 它最核心的作用是為 HTTP 形式的 Rest API 提供了非常簡潔高效的 RPC 呼叫方式。 如果說 Spring Cloud 其他成員解決的是系統級別的可用性,擴充套件性問題, 那麼 OpenFeign 解決的則是與開發人員利益最為緊密的開發效率問題。這篇文章中我們學會了Feign元件的整合和基礎使用,下一篇文章將寫一下Feign的更多用法,一起期待吧!
到此這篇關於Spring Cloud詳解實現宣告式微服務呼叫OpenFeign方法的文章就介紹到這了,更多相關Spring Cloud OpenFeign內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援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