Spring Cloud Feign的學習

Spring Cloud Feign

我們在使用 Spring Cloud Ribbon 時, 通常都會利用它對 RestTemplate 的請求攔截來實現對依賴服務的接口調用, 而 RestTemplate 已經實現了對 HTTP 請求的封裝處理, 形成了一套模板化的調用方法。在之前的例子中,我們只是簡單介紹了 RestTemplate 調用的實現,但是在實際開發中,由於對服務依賴的調用可能不止於一處,往往一個接口會被多處調用,所以我們通常都會針對各個微服務自行封裝,一些客戶端類來包裝這些依賴服務的調用。 這個時候我們會發現, 由於 RestTemplate 的封裝, 幾乎每一個調用都是簡單的模板化內容。

綜合上述這些情況, Spring Cloud Feign 在此基礎上做了進一步封裝, 由它來幫助我們定義和實現依賴服務接口的定義。在 Spring Cloud Feign 的實現下, 我們只需創建一個接口並用解的方式來配置它, 即可完成對服務提供方的接口綁定, 簡化了在使用 Spring Cloud 伈bbon 時自行封裝服務調用客戶端的開發量。 Spring Cloud Feign 具備可插拔的註解支持,包括 Feign 註解和 JAX-RS 註解。 同時, 為了適應 Spring 的廣大用戶,它在 Netflix Feign的基礎上擴展了對 Spring MVC 的註解支待。

調用示例

Spring Cloud Feign的學習

將需要調用的接口放置公共模塊common,provider為具體實現,consumer聲明需要調用的服務。

搭建

還是用之前的搭建eureka和ribbon的工程。新建一個springcloud-feign-consumer模塊

Spring Cloud Feign的學習

添加依賴:

<code> 

<

dependencies

>

<

dependency

>

<

groupId

>

org.springframework.boot

groupId

>

<

artifactId

>

spring-boot-starter-web

artifactId

>

dependency

>

<

dependency

>

<

artifactId

>

springcloud-commom

artifactId

>

<

groupId

>

com.learn.springcloud

groupId

>

<

version

>

1.0-SNAPSHOT

version

>

dependency

>

<

dependency

>

<

groupId

>

org.springframework.cloud

groupId

>

<

artifactId

>

spring-cloud-starter-netflix-eureka-client

artifactId

>

dependency

>

dependencies

>

/<code>

controller:

<code> 

public

class

FeignConsumerController

{

private

EmployeeRemoteService employeeRemoteService;

public

Employee getEmployeeRemote() {

return

employeeRemoteService.getEmployeeRemote(); } }/<code>

啟動類:

<code> 

@EnableFeignClients

@SpringBootApplication

public class FeignConsumerApplication {

public

static

void

main

(String[] args) {

SpringApplication

.run

(FeignConsumerApplication.class, args); } }/<code>

配置文件:

<code>

server

:

port

:

7000

spring

:

application

:

name

: springcloud-feign-consumer

eureka

:

client

:

serviceUrl

:

defaultZone

:

http

:/<code>

Common模塊,添加openfeign依賴

<code> 

<

dependencies

>

<

dependency

>

<

groupId

>

org.springframework.cloud

groupId

>

<

artifactId

>

spring-cloud-starter-openfeign

artifactId

>

dependency

>

dependencies

>

/<code>

聲明需要調用的服務

<code> 
 
 

public

interface

EmployeeRemoteService

{

public

Employee getEmployeeRemote(); } /<code>

Provider端服務實現為:

<code> 

public

class

EmployeeController

{ (

"/provider/get/employee/remote"

)

public

Employee

getEmployeeRemote

()

{

return

new

Employee(

12

,

"Tom"

, BigDecimal.valueOf(

4933.55

)); } }/<code>

啟動springcloud-feign-consumer,springcloud-feign-eureka,springcloud-feign-provider。

啟動成功後瀏覽器輸入訪問地址。

http://localhost:7000/feign/consumer/get/emp,調用成功。

Spring Cloud Feign的學習



分享到:


相關文章: