Ocelot容許您指定服務發現提供程序,並使用它來查找Ocelot正在將請求轉發給下游服務的主機和端口。目前,這僅在GlobalConfiguration部分中受支持,這意味着全部ReRoute將使用相同的服務發現提供程序,以便在ReRoute級別指定ServiceName。javascript
Consul
GlobalConfiguration中須要如下內容。 提供者是必需的,若是你沒有指定主機和端口,默認使用Consul。html
"ServiceDiscoveryProvider": {
"Host": "localhost",
"Port": 9500
}
未來咱們能夠添加一個功能,容許ReRoute配置服務發現提供程序。java
爲了告訴Ocelot一個ReRoute須要使用服務發現提供程序來發現下游主機和端口,您必須在下游請求配置中添加ServiceName,UseServiceDiscovery和LoadBalancer。 目前Ocelot有RoundRobin(輪詢)和LeastConnection(最少鏈接)兩個負載均衡的算法。 若是沒有指定負載均衡器,Ocelot將不會均衡請求。git
{
"DownstreamPathTemplate": "/api/posts/{postId}",
"DownstreamScheme": "https",
"UpstreamPathTemplate": "/posts/{postId}",
"UpstreamHttpMethod": [ "Put" ],
"ServiceName": "product",
"LoadBalancer": "LeastConnection",
"UseServiceDiscovery": true
}
如此設置以後,Ocelot將從服務發現提供程序查找下游主機和端口,並經過可用服務平衡請求。github
ACL Token
若是您使用Consul的ACL,Ocelot也支持添加X-Consul-Token頭。 爲了實現ACL訪問,您必須添加下面的附加屬性Token。算法
"ServiceDiscoveryProvider": {
"Host": "localhost",
"Port": 9500,
"Token": "footoken"
}
Ocelot會將這個令牌添加到用來發出請求的consul客戶端,而後用於後續的每一個請求。json
Eureka
這個功能是做爲問題 262的一部分被提出。爲Netflix的Eureka服務發現提供程序添加支持。 主要緣由是它是Steeltoe的一個關鍵部分,Steeltoe又與Pivotal有關! 反正背景很牛逼。api
爲了使Eureka工做,須要在 ocelot.json中添加以下配置..服務器
"ServiceDiscoveryProvider": {
"Type": "Eureka"
}
遵循這裏的指導,您可能還須要添加一些內容到appsettings.json。 例如,下面的json告訴steeltoe/關鍵服務在哪裏尋找服務發現服務器,以及服務是否應該向其註冊。markdown
"eureka": {
"client": {
"serviceUrl": "http://localhost:8761/eureka/",
"shouldRegisterWithEureka": false,
"shouldFetchRegistry": true
}
}
我被告知,若是shouldRegisterWithEureka是false,那麼shouldFetchRegistry將會默認爲true,因此你不須要顯式地將它留在這裏。
如今Ocelot將在啓動時註冊全部必要的服務,而且若是配置有上述json,則會將其註冊到Eureka。其中一項服務每30秒(默認)輪詢一次Eureka獲取最新的服務狀態並將其保留在內存中。當Ocelot要求提供給定的服務時,它會從內存中檢索出來,所以性能不是一個大問題。注意,此代碼由Pivotal.Discovery.Client 的NuGet包提供,因此很是感謝他們的辛勤工做。
原做者:小水 原文連接:https://www.cnblogs.com/loogn/p/9007776.html