SpringCloud微服務之OpenFeign

2021-10-14 09:33:21 字數 4161 閱讀 2067

在之前進行微服務的呼叫用的是ribbon+resttemplate,就像這樣:

}這樣呼叫微服務是更偏向面向restfull風格,但偏離了面向介面程式設計

使用openfeign,openfeign底層還是用的ribbon。

新增openfeign依賴

>

>

org.springframework.cloudgroupid

>

>

spring-cloud-starter-openfeignartifactid

>

dependency

>

openfeign已包含了ribbon

在啟動類上新增@enablefeignclients註解表示使用feign

@enableautoconfiguration

@configuration

@componentscan

(basepackages =

"com"

)@enablediscoveryclient

@enableeurekaclient

@enablefeignclients

@ribbonclient

(name =

"eureka-provider"

,configuration = iruleconfiguration.

class

)public

class

springcloudconsumer

@bean

@loadbalanced

public resttemplate resttemplate()

}

//@component

@feignclient

(name =

"eureka-provider"

)public

inte***ce

userservice")

user id

(@pathvariable

("id"

) integer id);(

"/user/testribbon"

) string port()

;}

向eureka中注入兩個服務提供者

下面是服務提供者提供的api介面,兩個提供者的**相同

@restcontroller

("user"

)public

class

usercontrollerprovider")

private string port;

("testribbon"

)public string testribbon()

("feign/"

)public user id

(@pathvariable

("id"

) integer id)

}

消費者的api介面

@restcontroller

("user"

)@slf4j

public

class

usercontrollercomsumer")

public user byid

(@pathvariable

("id"

) integer id)

("port"

)public string port()

}

瀏覽器中進行測試

當消費者呼叫提供者的**如果出現網路等問題可能會出現長時間呼叫等待問題,ribbo預設的呼叫時間是1秒

在提供者的**中新增耗時**

("testribbon"

)public string testribbon()

catch

(interruptedexception e)

return port;

}再測試消費者介面就會報錯

修改預設的超時時間的兩種方式

ribbon

:#連線超時時間

connecttimeout

:4000

#呼叫超時時間

readtimeout

:4000

2、新增

feign

:client

:config

:default

:connecttimeout

:2000

readtimeout

:4000

如果同時設定這兩種,那麼ribbon優先順序大於feign

在消費端建立乙個feign日誌配置類

@configuration

public

class

feignlogconfiguration

}

在配置檔案中設定日誌級別

logging

:level

:com.tao.controller

: debug

這樣在進行服務呼叫時技能檢視相關日誌

因為底層還是使用ribbon,所以還是使用ribbon的負載均衡方式

1、配置檔案方式

eureka-provider

:ribbon

:roundrobinrule

:nfloadbalancerruleclassname

: com.netflix.loadbalancer.randomrule

2、配置類+註解

在主配置類不能掃瞄的包中建立乙個配置類

@configuration

public

class

iruleconfiguration

}

在主啟動類上新增註解ribbonclient

name :服務名稱,

iruleconfiguration:自定義配置負載均衡策略類

@ribbonclient

(name =

"eureka-provider"

,configuration = iruleconfiguration.

class

)public

class

springcloudconsumer

@bean

@loadbalanced

public resttemplate resttemplate()

}

微服務之springcloud

分布式架構的概念 多個子模組相互協作才能完成業務流程,系統之間需要進行通訊。優點 1 把模組拆分,使用介面通訊,降低模組之間的耦合度。2 把專案拆分成若干個子專案,不同團隊負責不同子專案。3 增加功能時只需要再增加子專案,呼叫其他系統的介面 4 可以靈活進行分布式部署 缺點 1 系統之間互動需要使用...

SpringCloud微服務之 Ribbon

ribbon簡介 需要解決的問題 如何在配置eureka client註冊中心時不去硬編碼eureka server的位址?在微服務不同模組間進行通訊時,如何不去硬編碼服務提供者的位址?當部署多個相同微服務時,如何實現請求時的負載均衡?實現負載均衡方式1 通過伺服器端實現負載均衡 nginx rib...

Spring Cloud 微服務之Feign(七)

新增服務 測試使用 多次訪問 http localhost 8080 get 1可以看到feign預設採用輪詢演算法依次在每乙個服務方進行訪問 利用feign我們只需要為feign客戶端定義的業務介面新增乙個服務降級處理的實現類即可 feign提供了日誌列印功能,我們可以通過配置來調整日誌級別,從而...