1. 程式人生 > >Java SpringCloud系列(四) —— Feign(偽RPC)模式實現服務間相互呼叫

Java SpringCloud系列(四) —— Feign(偽RPC)模式實現服務間相互呼叫

首先,整個課程系列需要同學們有一定的基礎技能,分別是java、springboot、github以及基礎的Linux的知識,其中springboot是各位同學一定要掌握的,如果沒有springboot基礎可以檢視我之前的部落格對 java 搭建基於springboot的ssm(spring + springmvc + mybatis)的maven專案java 搭建基於springboot的ssh(spring + springmvc + hibernate)的gradle專案(基礎篇) 進行學習,關於github以及Linux方面可以在使用到的時候再進行學習以及準備。
經過前面的三篇文章,已經將大體的準備工作完成,接下來我們繼續講Feign新增到我們的框架中。

1. Feign簡介

Feign包含了Ribbon和Hystrix,它的主要作用是實現服務之間的呼叫,雖然使用Ribbon+Hystrix也能實現服務間的呼叫,但是程式碼實在是過於醜陋,所以我們要使用Feign實現服務間的呼叫,讓我們的程式碼簡潔起來,需要注意的是Feign使用的是偽RPC的模式,即http的rest風格進行服務間的呼叫,這與Dubbo是有所區別的。這裡就不過多介紹http與rpc的區別了。同學們可以自己百度檢視,簡單來說http開發簡潔迭代快,rpc效率高。

2.Feign搭建

2.1 環境準備

開發工具:idea
開發環境:JDK8
spring boot 版本: 2.0.3
構建工具: gradle4.5(因為springboot使用2.0所以gradle要使用4.0以上版本)

2.2 專案改造

我們來使用我們之前專案建立好的eureka以及clientone和clinettwo,我們來使用Feign實現clientone呼叫clienttwo的介面,不清楚專案搭建過程的可以檢視我之前的springcloud系列,首先開啟eureka、clientone以及clienttwo,如下圖所示

這裡寫圖片描述

接下來我們對clientone和clienttwo進行改造,改造過程一樣,我們這裡僅對clientone的改造進行介紹。

1.新增Feign依賴
這裡寫圖片描述

//新增feign依賴
compile('org.springframework.cloud:spring-cloud-starter-openfeign'
)

2.開啟Feign開關
這裡寫圖片描述

好了,改造完成。clienttwo的改造方式和上面一樣,是不是很簡單,其實主要還是Feign對Ribbon和Hystrix進行了包裝,才會讓我們的服務間呼叫變得如此簡單,接下來我們來看一下如何通過clientone來呼叫clienttwo的介面。

2.3 服務間呼叫

改造clienttwo

首先,我們在clienttwo中提供一個getInfo介面,如下圖所示。

這裡寫圖片描述

這裡寫圖片描述

改造clientone

我們現在通過clientone使用feign來呼叫clienttwo的getinfo方法

這裡寫圖片描述
這裡寫圖片描述

現在我們來訪問clientone中的hello/get/two/info介面,得到如下返回資料,呼叫成功。

這裡寫圖片描述

好了,大功告成了,其實基於Feign實現服務間呼叫還是件很容易的事的,希望各位同學可以自己手動實踐,來完成服務間的呼叫。