Ocelot Consul ACL
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
這個功能是作為
為了使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包提供,所以非常感謝他們的辛勤工作。
作者:loogn
連結:https://www.jianshu.com/p/1c431ac7d281
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。