Ocelot中文文件-服務發現

weixin_34365417發表於2018-05-04

Ocelot允許您指定服務發現提供程式,並使用它來查詢Ocelot正在將請求轉發給下游服務的主機和埠。目前,這僅在GlobalConfiguration部分中受支援,這意味著所有ReRoute將使用相同的服務發現提供程式,以便在ReRoute級別指定ServiceName。

Consul

GlobalConfiguration中需要以下內容。 提供者是必需的,如果你沒有指定主機和埠,預設使用Consul。

"ServiceDiscoveryProvider": {
    "Host": "localhost",
    "Port": 9500
}

將來我們可以新增一個功能,允許ReRoute配置服務發現提供程式。

為了告訴Ocelot一個ReRoute需要使用服務發現提供程式來發現下游主機和埠,您必須在下游請求配置中新增ServiceName,UseServiceDiscovery和LoadBalancer。 目前Ocelot有RoundRobin(輪詢)和LeastConnection(最少連線)兩個負載均衡的演算法。 如果沒有指定負載均衡器,Ocelot將不會均衡請求。

{
    "DownstreamPathTemplate": "/api/posts/{postId}",
    "DownstreamScheme": "https",
    "UpstreamPathTemplate": "/posts/{postId}",
    "UpstreamHttpMethod": [ "Put" ],
    "ServiceName": "product",
    "LoadBalancer": "LeastConnection",
    "UseServiceDiscovery": true
}

如此設定之後,Ocelot將從服務發現提供程式查詢下游主機和埠,並通過可用服務平衡請求。

ACL Token

如果您使用Consul的ACL,Ocelot也支援新增X-Consul-Token頭。 為了實現ACL訪問,您必須新增下面的附加屬性Token。

"ServiceDiscoveryProvider": {
    "Host": "localhost",
    "Port": 9500,
    "Token": "footoken"
}

Ocelot會將這個令牌新增到用來發出請求的consul客戶端,然後用於後續的每個請求。

Eureka

這個功能是作為問題 262的一部分被提出。為Netflix的Eureka服務發現提供程式新增支援。 主要原因是它是Steeltoe的一個關鍵部分,Steeltoe又與Pivotal有關! 反正背景很牛逼。

為了使Eureka工作,需要在 ocelot.json中新增如下配置..

"ServiceDiscoveryProvider": {
    "Type": "Eureka"
}

遵循這裡的指導,您可能還需要新增一些內容到appsettings.json。 例如,下面的json告訴steeltoe/關鍵服務在哪裡尋找服務發現伺服器,以及服務是否應該向其註冊。

"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包提供,所以非常感謝他們的辛勤工作。

previous
next

相關文章