向 ApiGateway(Ocelot-Cansul) 发送请求时出现 502 错误

问题描述 投票:0回答:1

每个服务分别响应它们收到的请求,但是当请求发送到 apigateway 时,会收到 502 错误。服务在 Consul 中注册。 Ocelot设置文件如下:

{ "Routes": [ { "ServiceName": "UserManagement", "DownstreamPathTemplate": "/api/v1/Users/{everything}", "DownstreamScheme": "http", "UpstreamPathTemplate": "/api/v1/Users/{everything}", "UpstreamHttpMethod": [ "Get" ] } ], "GlobalConfiguration": { "UseServiceDiscovery": true, "ReRoutesCaseSensitive": false, "ServiceDiscoveryProvider": { "Scheme": "http", "Host": "localhost", "Port": 8500, "Type": "Consul" } } }

错误:

警告:Ocelot.Responder.Middleware.ResponderMiddleware[0] requestId:0HN4IDB2FPUML:00000002,previousRequestId:没有PreviousRequestId,消息:'错误代码:ConnectionToDownstreamServiceError消息:连接到下游服务时出错,异常:System.Net.Http.HttpRequestException:没有这样的主机已知。 (服务器-1:5080) ---> System.Net.Sockets.SocketException (11001): 没有这样的主机已知。 在System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError错误,CancellationToken取消令牌) 在 System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 令牌) 在 System.Net.Sockets.Socket.g__WaitForConnectWithCancellation|285_0(AwaitableSocketAsyncEventArgs saea,ValueTask connectTask,CancellationToken CancellationToken) 在System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(字符串主机,Int32端口,HttpRequestMessage初始请求,布尔异步,CancellationToken取消令牌) --- 内部异常堆栈跟踪结束 --- 在System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(字符串主机,Int32端口,HttpRequestMessage初始请求,布尔异步,CancellationToken取消令牌) 在System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage请求,布尔异步,CancellationToken取消令牌) 在System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage请求,布尔异步,CancellationToken取消令牌) 在 System.Net.Http.HttpConnectionPool.AddHttp11ConnectionAsync(QueueItem 队列项) 在System.Threading.Tasks.TaskCompletionSourceWithCancellation

1.WaitWithCancellationAsync(CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.HttpConnectionWaiter
1.WaitForConnectionWithTelemetryAsync(HttpRequestMessage请求,HttpConnectionPool池,布尔异步,CancellationToken requestCancellationToken) 在 System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage 请求,布尔异步,布尔 doRequestAuth,CancellationToken CancellationToken) 在 System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage 请求,布尔异步,CancellationToken CancellationToken) 在Ocelot.Requester.TimeoutDelegatingHandler.SendAsync(HttpRequestMessage请求,CancellationToken取消令牌) 在 System.Net.Http.HttpMessageInvoker.g__SendAsyncWithTelemetry|6_0(HttpMessageHandler 处理程序、HttpRequestMessage 请求、CancellationToken CancellationToken) 在 ResponderMiddleware 中发现 Ocelot.Requester.MessageInvokerHttpRequester.GetResponse(HttpContext httpContext) 错误。设置错误响应请求路径:/api/v1/Users/GetAll,请求方式:GET'

我希望在向 apigateway 发送请求后获得我的用户列表。 当然,随着我对代码所做的更改,错误类型每次都会发生变化,但返回代码与 502 相同。 大多数错误消息与上游和下游的问题有关,显然需要在包含 Ocelot 设置文件的文件中进行修改。

c# asp.net-core api-gateway service-discovery ocelot
1个回答
0
投票

我也遇到了同样的问题,并且仍在为这个问题苦苦挣扎。你能解决吗?

© www.soinside.com 2019 - 2024. All rights reserved.