
我透過 hashcorp consul 測試了兩個場景
1.我在.net7上透過hashicorp consul實現了服務發現,但是當我想從consul獲取服務地址時,它只返回該服務的http而不是https。我透過 docker 上的註冊器註冊了我的服務,並透過 .net dockerized 發現了服務。
2.但是我在本地主機上測試了這個場景,我在本地主機上實現了兩個api,並在docker伺服器上運行的consul上註冊了其中一個,我發現當我透過consul從api2發現api1時,我請求了api1的https,但consul切換並將其更改為 http 並且它可以工作,我得到了結果。但我的伺服器上的相同情況(場景1)不起作用
我的實現:
services.AddServiceDiscovery(選項=>選項.UseConsul());
//HttpClinetFactory services.AddHttpClient("DiscoveryRandom").ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { ServerCertificateCustomValidationCallbackback = (sender, cert,,idain,ssl,a);
// 我注入:IHttpClientFactory clientFactory
_httpClient = clientFactory.CreateClient("DiscoveryRandom");
_httpClient.BaseAddress = new Uri($"https://{領事上的ServiceName}");
// 我的場景 1 的應用程式設定由伺服器上的 docker 完成註冊,我只是透過 consul 發現了它:
"$schema": "https://steeltoe.io/schema/latest/schema.json", "Consul": { "Host": "10.200.8.178", "Discovery": { "Register": false } }
// 我自己在本機上註冊的場景 2 的應用程式設定:
// 設定 api1 在 consul 上註冊
"$schema": "https://steeltoe.io/schema/latest/schema.json", "Consul": { "主機": "10.200.8.178", "發現": { "註冊": true, " serviceName": "TestConsul", "hostName": "localhost", "port": 7141, "deregister": false } }
// 以及服務發現 api2 的設置
"$schema": "https://steeltoe.io/schema/latest/schema.json", "Consul": { "Host": "10.200.8.178", "Discovery": { "Register": false } }