在之前進行微服務的呼叫用的是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提供了日誌列印功能,我們可以通過配置來調整日誌級別,從而...