我通过 hashicorp consul 测试了两种场景
1.我在 .net7 上通过 hashicorp consul 实现了服务发现,但是当我想从 consul 获取服务地址时,它只返回该服务的 http 而不是 https。我通过 docker 上的注册器注册了我的服务,也通过 .net dockerized 发现服务。
2.但是我在本地主机上测试了这个场景,我在本地主机上实现了两个 api,并在 docker 服务器上运行的 consul 上注册了其中一个,我发现当我通过 consul 从 api2 发现 api1 时,我请求了 api1 的 https 但是 consul 切换并将其更改为 http 并且它可以工作,我得到了结果。但是在我的服务器上同样的情况(场景 1)不起作用
我的实现:
服务.添加服务发现(选项=>选项.使用Consul());
//HttpClinetFactory 服务.AddHttpClient("DiscoveryRandom").ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { ServerCertificateCustomValidationCallback = (sender, cert, chain,sslPolicyErrors) => true, }).AddHttpMessageHandler().AddServiceDiscovery();
// 我注入:IHttpClientFactory clientFactory
_httpClient = clientFactory.CreateClient("发现随机");
_httpClient.BaseAddress = new Uri($"https://{consul 上的服务名称}");
// 我针对场景 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”:{“Host”:“10.200.8.178”,“发现”:{“注册”:true,“serviceName”:“TestConsul”,“hostName”:“localhost”,“port”:7141,“取消注册”:false}}
// 并设置服务发现 api2
“$schema”:“https://steeltoe.io/schema/latest/schema.json”,“Consul”:{“Host”:“10.200.8.178”,“Discovery”:{“Register”:false}}