我在azure服务结构集群中有一个api网关服务,我将其用作我的服务结构服务的网关。
这一切在我的机器上运行良好,在azure的1节点集群中也运行良好。
但是,当我在一个5节点集群中运行它时,会得到错误
System.Net.Http.HttpRequestException:
An error occurred while sending the request. --->
System.Net.WebException: Unable to connect to the remote server
System.Net.Sockets.SocketException:
No connection could be made because the target machine actively refused it 127.0.0.1:19081
我知道19081是默认的反向代理端口。我在任何地方都没有看到任何关于明确解除此端口锁定的说明,所以我假设它是打开的。
我很困惑为什么127.0.0.1在1节点集群而不是5节点集群中工作。
我认为问题可能是,我调用的服务并不总是与负载平衡器向其发送请求的api网关位于同一节点上。
我怎么能避开这个?
我的price service fabric服务有一个可以在任何节点上的实例。
对我来说,拥有多个价格服务实例是不可能的。
以下是我使用的链接:
You Tube Video
我要再看一遍,看是否遗漏了什么。
下面是我用来获取数据的代码:
var proxyUrl = $"http://My Service Fabric URL:{this._configSettings.ReverseProxyPort}/{url.Replace("fabric:/", "")}/api/{Area}/{method}{parameters}";
Log.Information($"xUrl: {proxyUrl}");
var response = await this._httpClient.GetAsync(proxyUrl).ConfigureAwait(false);
var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
if (response.StatusCode != System.Net.HttpStatusCode.OK)
{
Log.Information($"{this.GetType().Name}: Error Response: {response.StatusCode}");
return this.StatusCode((int) response.StatusCode);
}
Log.Information(this.GetType().Name + ": Called API");
根据下面的建议,我现在有了获取地址的代码:
var resolver = ServicePartitionResolver.GetDefault();
var partition = await resolver.ResolveAsync(_serviceContext.ServiceName, ServicePartitionKey.Singleton, CancellationToken.None).ConfigureAwait(false);
var endpoints = JObject.Parse(partition.GetEndpoint().Address)["Endpoints"];
var address = endpoints[""].ToString().TrimEnd('/');
var proxyUrl = $"{address}:{this._configSettings.ReverseProxyPort}/{url.Replace("fabric:/", "")}/api/{Area}/{method}{parameters}";
这给了
http://localhost:8081
是的。
如何与反向代理端口配合使用?
干杯
保罗